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