Deadlock between FileHandler and ConsoleHandler when using customized formatter
Peter Levart
peter.levart at gmail.com
Mon Dec 9 08:58:18 UTC 2013
On 12/09/2013 09:51 AM, Shi Jun Zhang wrote:
> On 12/9/2013 4:28 PM, Peter Levart wrote:
>> On 12/09/2013 08:02 AM, Shi Jun Zhang wrote:
>>> Peter,
>>>
>>> I think you are misunderstanding this problem. This deadlock is not
>>> related to the formatter synchronization, we can make
>>> CustomerFormatter.format not synchronized and not call super.format,
>>> the deadlock still happens.
>>
>> I'm not saying that your formatters are explicitly synchronized - all
>> formatters are currently effectively synchronized by LogHandlers. The
>> Formatter is invoked from within LogHandler's publish() method which
>> is synchronized (on LogHandler.this). If formatters were invoked out
>> of this synchronized section, there would be no danger of deadlocks
>> when using Logger.log from within custom formatters. But then other
>> issues would arise as a consequence of non-multithreaded formatters
>> being invoked concurrently...
>>
>> Regards, Peter
>>
> Hi Peter,
>
> We have thought about moving formatter out of the synchronized section
> of Handler.publish(), it can avoid the deadlock. However, we can
> reproduce the similar deadlock by extending the Writer in Handler and
> using logger in the customized Writer.
>
That's right. And the remedy for that situation would also be what Jason
Mehrens suggested - asynchronous publishing.
Regards, Peter
More information about the core-libs-dev
mailing list