RFR: 8023168 - Cleanup LogManager class initialization and LogManager/LoggerContext relationship

Daniel Fuchs daniel.fuchs at oracle.com
Thu Sep 5 07:43:14 UTC 2013

Hi David,

Thanks a lot for your feedback!

On 9/4/13 11:36 PM, David M. Lloyd wrote:
> As far as calling initialization ("ensureLogManagerInitialized()"), 
> it's a shame that checking for a one-time action has to run through a 
> synchronization block every time.  Maybe a "lazy holder" class would 
> be more appropriate here, especially given that the point seems to be 
> to produce the RootLogger() instance which doubles as the indicator 
> that initialization was done.

The point here is that we don't want a thread to be able to get at an 
half initialized LogManager, for instance,
one in which the root logger would have been added but not the global 
logger. This could lead to all kind of
race conditions. So I think RootLogger can't really be used as a marker 
here. I'll double check that however.
You wouldn't believe all the exceptions that were raised when I started 
working naively on this issue ;-)

I think I'd prefer to stay away from static initializers for this piece 
of code.
I'd propose to use a volatile boolean to mark when initialization is 
truly finished.
This way there would be no need to enter the synchronized block once 
LogManager has
finished initializing. I'll send a new webrev.
> There's a grammatical error in the comment at line 1547 of 
> LogManager.java: "We do not the protected Logger <...>".
Oh. Thanks for catching that!

best regards,

-- daniel

More information about the core-libs-dev mailing list