RFR: Workaround possible ResolvedMethodTable bug
Aleksey Shipilev
shade at redhat.com
Wed Jul 12 18:25:29 UTC 2017
I *think* there is a bug within a new ResolvedMethodTable machinery, coming from
here:
http://hg.openjdk.java.net/jdk10/hs/hotspot/rev/da4c9eef4316
The oops in that table are now weakly reachable, achieved by:
void SystemDictionary::roots_oops_do(OopClosure* strong, OopClosure* weak) {
...
if (weak != NULL) {
ResolvedMethodTable::oops_do(weak);
}
}
But here is a problem: Shenandoah init mark is passing (weak == NULL) if
reference processing is enabled:
_rp->process_strong_roots(&mark_cl,
_process_refs ? NULL : &mark_cl, // <--- here
&cldCl, &blobsCl, worker_id);
I think "normal" weak references get processed fine, because they will get
registered with ReferenceProcessor, and will get marked if actually reachable.
But not ResolvedMethodNames now! Which makes Verifier barf like this:
http://cr.openjdk.java.net/~shade/shenandoah/rmt-weak-bug/hs_err_pid25252.log
Notice that ResolvedMethodName is not marked.
Let us work that around for now, until we figure out more:
http://cr.openjdk.java.net/~shade/shenandoah/rmt-weak-bug/webrev.01/
This fix makes jcstress pass longer with Shenandoah verification enabled.
Thanks,
-Aleksey
More information about the shenandoah-dev
mailing list