--- old/src/hotspot/share/runtime/deoptimization.cpp Wed Nov 8 08:13:10 2017 +++ new/src/hotspot/share/runtime/deoptimization.cpp Wed Nov 8 08:13:09 2017 @@ -1304,26 +1304,22 @@ assert(SafepointSynchronize::is_at_safepoint(), "must only be called from safepoint"); GrowableArray* objects_to_revoke = new GrowableArray(); - { - ThreadsListHandle tlh; - JavaThreadIterator jti(tlh.list()); - for (JavaThread* jt = jti.first(); jt != NULL; jt = jti.next()) { - if (jt->has_last_Java_frame()) { - StackFrameStream sfs(jt, true); - while (!sfs.is_done()) { - frame* cur = sfs.current(); - if (cb->contains(cur->pc())) { - vframe* vf = vframe::new_vframe(cur, sfs.register_map(), jt); - compiledVFrame* cvf = compiledVFrame::cast(vf); - // Revoke monitors' biases in all scopes - while (!cvf->is_top()) { - collect_monitors(cvf, objects_to_revoke); - cvf = compiledVFrame::cast(cvf->sender()); - } + for (JavaThreadIteratorWithHandle jtiwh; JavaThread *jt = jtiwh.next(); ) { + if (jt->has_last_Java_frame()) { + StackFrameStream sfs(jt, true); + while (!sfs.is_done()) { + frame* cur = sfs.current(); + if (cb->contains(cur->pc())) { + vframe* vf = vframe::new_vframe(cur, sfs.register_map(), jt); + compiledVFrame* cvf = compiledVFrame::cast(vf); + // Revoke monitors' biases in all scopes + while (!cvf->is_top()) { collect_monitors(cvf, objects_to_revoke); + cvf = compiledVFrame::cast(cvf->sender()); } - sfs.next(); + collect_monitors(cvf, objects_to_revoke); } + sfs.next(); } } }