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