# HG changeset patch # User eosterlund # Date 1562059981 -7200 # Node ID 2f464d62894290ef9f1e49f7c12ab286491dcf6a # Parent 4c0a7916d3cdb5e859d6e44deb0cf0a40bb6c481 8219687: G1 asserts nmethod should not be unloaded during parallel code cache unloading Reviewed-by: tschatzl, kvn diff -r 4c0a7916d3cd -r 2f464d628942 src/hotspot/share/code/nmethod.cpp --- a/src/hotspot/share/code/nmethod.cpp Tue Jul 02 09:14:51 2019 +0200 +++ b/src/hotspot/share/code/nmethod.cpp Tue Jul 02 11:33:01 2019 +0200 @@ -1774,10 +1774,9 @@ } } -void nmethod::oops_do(OopClosure* f, bool allow_zombie) { +void nmethod::oops_do(OopClosure* f, bool allow_dead) { // make sure the oops ready to receive visitors - assert(allow_zombie || !is_zombie(), "should not call follow on zombie nmethod"); - assert(!is_unloaded(), "should not call follow on unloaded nmethod"); + assert(allow_dead || is_alive(), "should not call follow on dead nmethod"); // Prevent extra code cache walk for platforms that don't have immediate oops. if (relocInfo::mustIterateImmediateOopsInCode()) { diff -r 4c0a7916d3cd -r 2f464d628942 src/hotspot/share/code/nmethod.hpp --- a/src/hotspot/share/code/nmethod.hpp Tue Jul 02 09:14:51 2019 +0200 +++ b/src/hotspot/share/code/nmethod.hpp Tue Jul 02 11:33:01 2019 +0200 @@ -473,7 +473,7 @@ public: void oops_do(OopClosure* f) { oops_do(f, false); } - void oops_do(OopClosure* f, bool allow_zombie); + void oops_do(OopClosure* f, bool allow_dead); bool test_set_oops_do_mark(); static void oops_do_marking_prologue(); diff -r 4c0a7916d3cd -r 2f464d628942 src/hotspot/share/gc/shared/gcBehaviours.cpp --- a/src/hotspot/share/gc/shared/gcBehaviours.cpp Tue Jul 02 09:14:51 2019 +0200 +++ b/src/hotspot/share/gc/shared/gcBehaviours.cpp Tue Jul 02 11:33:01 2019 +0200 @@ -64,7 +64,7 @@ bool ClosureIsUnloadingBehaviour::is_unloading(CompiledMethod* cm) const { if (cm->is_nmethod()) { IsCompiledMethodUnloadingOopClosure cl(_cl); - static_cast(cm)->oops_do(&cl); + static_cast(cm)->oops_do(&cl, true /* allow_dead */); return cl.is_unloading(); } else { return false; diff -r 4c0a7916d3cd -r 2f464d628942 src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp --- a/src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp Tue Jul 02 09:14:51 2019 +0200 +++ b/src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp Tue Jul 02 11:33:01 2019 +0200 @@ -170,7 +170,7 @@ ShenandoahLocker locker(CodeCache_lock->owned_by_self() ? NULL : &_recorded_nms_lock); ShenandoahNMethodOopDetector detector; - nm->oops_do(&detector, /* allow_zombie = */ true); + nm->oops_do(&detector, /* allow_dead = */ true); if (detector.has_oops()) { int idx = _recorded_nms->find(nm, ShenandoahNMethod::find_with_nmethod);