RFR: 8146009: "pure virtual method called" with using new GC logging mechanism

Marcus Larsson marcus.larsson at oracle.com
Fri Oct 7 14:26:41 UTC 2016


Hi,

Making another attempt to fix this issue.

Summary:
The following patch resolves a problem where the VM would crash during 
shutdown due to static log related memory being de-initialized before 
the last use of the logging framework. The solution involves parts of 
the Nifty Counter idiom [0] to control static initialization and 
de-initialization of stdout's and stderr's LogOutputs. Both objects are 
now allocated using placement new, and avoids destructor calls during 
de-initialization. The LogStreamInitializer makes sure both objects are 
initialized before first use.

Because the LogOutput::Stdout/err pointers could no longer be kept in 
LogOutput, I've replaced all usages of them with the new references instead.

The patch includes a regression test for this issue, contributed by 
Michail Chernov.

Webrev:
http://cr.openjdk.java.net/~mlarsson/8146009/webrev.00

Issue:
https://bugs.openjdk.java.net/browse/JDK-8146009

Testing:
JPRT testset hotspot, included test on supported platforms.

Thanks,
Marcus

[0] https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Nifty_Counter


More information about the hotspot-dev mailing list