# HG changeset patch # User rkennke # Date 1575489561 -3600 # Wed Dec 04 20:59:21 2019 +0100 # Node ID b2d3c21ae3f632a77b77dbae694a597ab3531b2a # Parent db5097a1ec61b47585c9e743d0ca7cb6af04729c 8235355: Shenandoah: Resolve deadlock between OOM handler and nmethod lock diff --git a/src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp b/src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp --- a/src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahCodeRoots.cpp @@ -215,6 +215,7 @@ if (nm->is_unloading()) { ShenandoahReentrantLocker locker(nm_data->lock()); + ShenandoahEvacOOMScope evac_scope; unlink(nm); return; } @@ -222,6 +223,7 @@ ShenandoahReentrantLocker locker(nm_data->lock()); // Heal oops and disarm + ShenandoahEvacOOMScope evac_scope; ShenandoahNMethod::heal_nmethod(nm); ShenandoahNMethod::disarm_nmethod(nm); @@ -258,7 +260,6 @@ } virtual void work(uint worker_id) { - ShenandoahEvacOOMScope evac_scope; ICRefillVerifierMark mark(_verifier); _iterator.nmethods_do(&_cl); }