From bad5edf1468eb27c0c2f6f53e212de758c726395 Mon Sep 17 00:00:00 2001 From: sunguoyun Date: Fri, 8 Dec 2023 10:47:58 +0000 Subject: [PATCH] 8320959: jdk/jfr/event/runtime/TestShutdownEvent.java crash with CONF=fastdebug -Xcomp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Markus Grönlund Reviewed-by: mgronlun --- src/hotspot/share/jfr/support/jfrNativeLibraryLoadEvent.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/hotspot/share/jfr/support/jfrNativeLibraryLoadEvent.cpp b/src/hotspot/share/jfr/support/jfrNativeLibraryLoadEvent.cpp index c26592763d4..da669ee4354 100644 --- a/src/hotspot/share/jfr/support/jfrNativeLibraryLoadEvent.cpp +++ b/src/hotspot/share/jfr/support/jfrNativeLibraryLoadEvent.cpp @@ -105,13 +105,15 @@ static void commit(HelperType& helper) { assert(thread != nullptr, "invariant"); if (thread->is_Java_thread()) { JavaThread* jt = JavaThread::cast(thread); - if (jt->thread_state() != _thread_in_vm) { - assert(jt->thread_state() == _thread_in_native, "invariant"); + if (jt->thread_state() == _thread_in_native) { // For a JavaThread to take a JFR stacktrace, it must be in _thread_in_vm. Can safepoint here. ThreadInVMfromNative transition(jt); event.commit(); return; } + // If a thread comes here still _thread_in_Java, which can happen for example + // when loading the disassembler library in response to traps in JIT code - all is ok. + // Since there is no ljf, an event will be committed without a stacktrace. } event.commit(); }