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