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