Garbage collection race condition before final checks
Mandy Chung
mandy.chung at oracle.com
Mon Nov 14 20:53:10 UTC 2011
On 11/10/11 06:41, Gary Adams wrote:
> On 11/ 8/11 11:13 PM, Mandy Chung wrote:
>>
>>
>> Thanks for picking up this bug and fixing this intermittent issue.
>> PlatformLoggingMXBeanTest.java in the same directory has the same
>> issue. It'd be good to fix that with the same CR. These tests were
>> copied from test/java/util/logging/LoggingMXBeanTest.java. I haven't
>> looked in details but I wonder why the test/java/util/logging tests
>> don't have this intermittent issue and I suspect it holds a strong
>> reference.
>
> I attempted to break PlatformLoggingMXBeanTest.java with a generous
> application of
> GC calls, but I could not get it to fail in the same manner as the
> other test. It may be
> failing due to a different condition.
>
It's a timing issue when Logger.getLogger and setLogLevel method are
called. If you move these 2 lines:
Logger logger1 = Logger.getLogger( LOGGER_NAME_1 );
Logger logger2 = Logger.getLogger( LOGGER_NAME_2 );
to the PlatformLoggerMXBeanTest constructor (this is about the same
place to when LoggingMXBeanTest calls Logger.getLogger), I am able to
reproduce the problem.
It's harder to reproduce the problem when the timing window between
Logger.getLogger that creates a reference the logger on stack and
setLogLevel method call is probably too small that GC hardly occurs in
the systems I tried. Give it a try to see if this helps.
I took your patch and generate the webrev:
http://cr.openjdk.java.net/~mchung/jdk8/webrevs/7067691/webrev.00/
line 46: about the name, how about simply renaming it to "test" ?
line 230-232: I wonder if the bracket is intentional?
Mandy
More information about the core-libs-dev
mailing list