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);