< prev index next >

src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp

Print this page
rev 57230 : 8235355: Shenandoah: Resolve deadlock between OOM handler and nmethod lock

@@ -213,17 +213,19 @@
       return;
     }
 
     if (nm->is_unloading()) {
       ShenandoahReentrantLocker locker(nm_data->lock());
+      ShenandoahEvacOOMScope evac_scope;
       unlink(nm);
       return;
     }
 
     ShenandoahReentrantLocker locker(nm_data->lock());
 
     // Heal oops and disarm
+    ShenandoahEvacOOMScope evac_scope;
     ShenandoahNMethod::heal_nmethod(nm);
     ShenandoahNMethod::disarm_nmethod(nm);
 
     // Clear compiled ICs and exception caches
     if (!nm->unload_nmethod_caches(_unloading_occurred)) {

@@ -256,11 +258,10 @@
     MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
     _iterator.nmethods_do_end();
   }
 
   virtual void work(uint worker_id) {
-    ShenandoahEvacOOMScope evac_scope;
     ICRefillVerifierMark mark(_verifier);
     _iterator.nmethods_do(&_cl);
   }
 
   bool success() const {
< prev index next >