--- old/src/hotspot/share/prims/jvmtiThreadState.cpp 2020-06-24 15:18:09.899191817 +0900 +++ new/src/hotspot/share/prims/jvmtiThreadState.cpp 2020-06-24 15:18:09.822189926 +0900 @@ -216,13 +216,15 @@ // Helper routine used in several places int JvmtiThreadState::count_frames() { + Thread *current_thread = Thread::current(); guarantee(SafepointSynchronize::is_at_safepoint() || - (JavaThread *)Thread::current() == get_thread(), - "must be current thread or at safepoint"); + current_thread == get_thread() || + (current_thread->is_Java_thread() && (current_thread == get_thread()->active_handshaker())), + "must be at safepoint or target thread is suspended"); if (!get_thread()->has_last_Java_frame()) return 0; // no Java frames - ResourceMark rm; + ResourceMark rm(current_thread); RegisterMap reg_map(get_thread()); javaVFrame *jvf = get_thread()->last_java_vframe(®_map); int n = 0;