RFR: 8010939 Deadlock in LogManager
Mandy Chung
mandy.chung at oracle.com
Fri Apr 12 22:51:26 UTC 2013
Hi Jim,
Thanks for fixing this.
On 4/12/2013 1:11 PM, Jim Gish wrote:
> Please review:
> http://cr.openjdk.java.net/~jgish/Bug8010939-LogManager-Deadlock/
>
The fix looks okay. I would recommend to move the call to
manager.drainLoggerRefQueueBounded() back to LogManager.addLogger which
was originally intended and make the two separate synchronized methods
called at the entry point as it's described in the comments of the
drainLoggerRefQueueBounded.
You added a comment listing the bug ID. Our convention does not
reference the bug numbers in the source unless it's absolute critical
information to capture to help cross-referencing. I wouldn't want to
see the bug numbers in the source that are fixed in the past 18 years :)
Good that you have a test to reproduce the deadlock. A few comments:
The thread should be daemon threads so that the test will terminate
right away if there is a deadlock.
L99: is this needed to reproduce the deadlock? Logger.getLogger has
already called LogManager.addLogger to register the logger.
L111: what exception is expected to be thrown and ignored by the test?
L137,144 you can call ThreadMXBean.isSynchronizerUsageSupported() to
test if monitoring of ownable synchronizer is supported instead of catch
UOE.
L154: you may just throw an exception and terminate the test.
Better to rename your test to some informative name that will give some
idea what it does. It should have @summary to give a summary of what it
tests. There are several deadlock tests in test/java/util/logging. I
like your framework and probably good to consolidate these deadlock
tests but this is something for the future clean up - just to mention
it. The LoggingDeadlocks*.java tests have the comments how the deadlock
occurs that I find useful. It'll be good to add similar information in
your new test. Some formatting nit: L97 a space after "i=0;" and an
extra space is many places (e.g. L69-71, L128, 141, 156, etc: a space
not needed in front of the first parameter after "(", a space of the
last parameter before ")" not needed - L127, 134, 152, etc.
thanks
Mandy
More information about the core-libs-dev
mailing list