OpenJDK / jdk / jdk
changeset 55562:2f464d628942
8219687: G1 asserts nmethod should not be unloaded during parallel code cache unloading
Reviewed-by: tschatzl, kvn
author | eosterlund |
---|---|
date | Tue, 02 Jul 2019 11:33:01 +0200 |
parents | 4c0a7916d3cd |
children | d56b192c73e9 |
files | src/hotspot/share/code/nmethod.cpp src/hotspot/share/code/nmethod.hpp src/hotspot/share/gc/shared/gcBehaviours.cpp src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp |
diffstat | 4 files changed, 5 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- 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()) {
--- 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();
--- 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<nmethod*>(cm)->oops_do(&cl); + static_cast<nmethod*>(cm)->oops_do(&cl, true /* allow_dead */); return cl.is_unloading(); } else { return false;
--- 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);