RFR (XS) 8047212: fix race between ObjectMonitor alloc and verification code (original) (raw)
Daniel D. Daugherty daniel.daugherty at oracle.com
Tue Oct 20 03:02:33 UTC 2015
- Previous message: RFR (S): 8139801: Error message from validation check has wrong order on Windows
- Next message: RFR (XS) 8047212: fix race between ObjectMonitor alloc and verification code
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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:
Thanks, in advance, for any comments, questions or suggestions.
Dan
- Previous message: RFR (S): 8139801: Error message from validation check has wrong order on Windows
- Next message: RFR (XS) 8047212: fix race between ObjectMonitor alloc and verification code
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]