RFR (XS) 8047212: fix race between ObjectMonitor alloc and verification code

Daniel D. Daugherty daniel.daugherty at oracle.com
Tue Oct 20 03:02:33 UTC 2015


Greetings,

I have a fix for a long standing race between the lock-free ObjectMonitor
verification code and the normal (locked) ObjectMonitor block allocation
code path. For this fix, I would like at least a Runtime team reviewer
and a Serviceability team reviewer. Thanks!

JDK-8047212 runtime/ParallelClassLoading/bootstrap/random/inner-complex
             assert(ObjectSynchronizer::verify_objmon_isinpool(inf)) failed:
             monitor is invalid
https://bugs.openjdk.java.net/browse/JDK-8047212

Webrev URL: http://cr.openjdk.java.net/~dcubed/8047212-webrev/0-jdk9-hs-rt/

Testing: Aurora Adhoc RT-SVC nightly batch
          4 inner-complex fastdebug parallel runs for 4+ days and
            600K iterations without seeing this failure; the experiment
            is still running; final results to be reported at the end
            of the review cycle
          JPRT -testset hotspot

This fix:

- makes ObjectMonitor::gBlockList volatile
- uses "OrderAccess::release_store_ptr(&gBlockList, temp)" to
   make sure the new block updates _happen before_ gBlockList is
   changed to refer to the new block
- add SA support for a "static pointer volatile" field like:

     static ObjectMonitor * volatile gBlockList;

See the following link for a nice description of what "volatile"
means in the different positions on a variable/parameter decl line:

http://www.embedded.com/electronics-blogs/beginner-s-corner/4023801/Introduction-to-the-Volatile-Keyword

Thanks, in advance, for any comments, questions or suggestions.

Dan



More information about the serviceability-dev mailing list