8235355: Shenandoah: Resolve deadlock between OOM handler and nmethod lock

Reviewed-by: zgu
This commit is contained in:
Roman Kennke 2019-12-04 21:40:08 +01:00
parent d713fb8aa2
commit 0a375cfa2d

View File

@ -215,6 +215,7 @@ public:
if (nm->is_unloading()) {
ShenandoahReentrantLocker locker(nm_data->lock());
ShenandoahEvacOOMScope evac_scope;
unlink(nm);
return;
}
@ -222,6 +223,7 @@ public:
ShenandoahReentrantLocker locker(nm_data->lock());
// Heal oops and disarm
ShenandoahEvacOOMScope evac_scope;
ShenandoahNMethod::heal_nmethod(nm);
ShenandoahNMethod::disarm_nmethod(nm);
@ -258,7 +260,6 @@ public:
}
virtual void work(uint worker_id) {
ShenandoahEvacOOMScope evac_scope;
ICRefillVerifierMark mark(_verifier);
_iterator.nmethods_do(&_cl);
}