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