RFR: Generic verification should not trust bitmaps
    Aleksey Shipilev 
    shade at redhat.com
       
    Mon Jun 12 15:09:36 UTC 2017
    
    
  
There is a path to verification via Universe::verify(). Before today, we thought
it is a sane idea to piggyback on G1 Mark* constants to select which bitmap to
trust. But it turns out, we can call verification on VM exit when either CM or
UR were cancelled, and thus we cannot trust bitmaps.
The solution is to be more conservative there:
$ hg diff
diff -r e06be1d290c4 src/share/vm/gc/shenandoah/shenandoahVerifier.cpp
--- a/src/share/vm/gc/shenandoah/shenandoahVerifier.cpp	Thu Jun 08 19:37:46 2017
+0200
+++ b/src/share/vm/gc/shenandoah/shenandoahVerifier.cpp	Mon Jun 12 17:06:19 2017
+0200
@@ -342,27 +342,10 @@
 }
 void ShenandoahVerifier::verify_generic(VerifyOption vo) {
-  // _vo == UsePrevMarking -> use "prev" marking information,
-  // _vo == UseNextMarking -> use "next" marking information,
-  // _vo == UseMarkWord    -> use mark word from object header.
-
-  VerifyMarked mark_verify;
-  switch (vo) {
-    case VerifyOption_G1UsePrevMarking:
-      mark_verify = _verify_marked_complete;
-      break;
-    case VerifyOption_G1UseNextMarking:
-      mark_verify = _verify_marked_next;
-      break;
-    default:
-      mark_verify = _verify_marked_disable;
-      break;
-  }
-
   verify_reachable_at_safepoint(
           "Generic Verification",
           _verify_forwarded_allow,     // conservatively allow forwarded
-          mark_verify,                 // (selector above)
+          _verify_marked_disable,      // cannot trust bitmaps here
           _verify_matrix_disable,      // matrix can be inconsistent here
           _verify_cset_disable         // cset may be inconsistent
   );
Testing: hotspot_gc_shenandoah, jcstress -m quick
Thanks,
-Aleksey
    
    
More information about the shenandoah-dev
mailing list