Greetings, I have a "fix" for a long standing race between JVM shutdown and the JVM statistics subsystem:
JDK-8049304 race between VM_Exit and _sync_FutileWakeups->inc() https://bugs.openjdk.java.net/browse/JDK-8049304 Webrev URL: http://cr.openjdk.java.net/~dcubed/8049304-webrev/0-jdk9-hs-rt/ Testing: Aurora Adhoc RT-SVC nightly batch Aurora Adhoc vm.tmtools batch Kim's repro sequence for JDK-8049304 Kim's repro sequence for JDK-8129978 JPRT -testset hotspot This "fix": - adds a volatile flag to record whether PerfDataManager is holding data (PerfData objects) - adds PerfDataManager::has_PerfData() to return the flag - changes the Java monitor subsystem's use of PerfData to check both allocation of the monitor subsystem specific PerfData object and the new PerfDataManager::has_PerfData() return value If the global 'UsePerfData' option is false, the system works as it did before. If 'UsePerfData' is true (the default on non-embedded systems), the Java monitor subsystem will allocate a number of PerfData objects to record information. The objects will record information about Java monitor subsystem until the JVM shuts down. When the JVM starts to shutdown, the new PerfDataManager flag will change to false and the Java monitor subsystem will stop using the PerfData objects. This is the new behavior. As noted in the comments I added to the code, the race is still present; I'm just changing the order and the timing to reduce the likelihood of the crash. Thanks, in advance, for any comments, questions or suggestions. Dan