On Thu, 28 Apr 2022 11:15:34 GMT, David Holmes <dhol...@openjdk.org> wrote:
>> Calling JavaThread::thread_from_jni_environment for a terminated thread in >> AsyncGetCallTrace might cause the acquisition of a lock, making >> AsyncGetCallTrace non-signal-safe. >> >> AsyncGetCallTrace can only be called for the current threads (there are >> asserts for that), therefore using JavaThread::current directly and checking >> the termination status is semantically equivalent. > > src/hotspot/share/prims/forte.cpp line 566: > >> 564: void AsyncGetCallTrace(ASGCT_CallTrace *trace, jint depth, void* >> ucontext) { >> 565: >> 566: JavaThread* thread = JavaThread::current_or_null(); > > As this can be in a signal handling context it needs to be > Thread::current_or_null_safe(). Also please add a comment before this: // Can't use thread_from_jni_environment as it may also perform a VM exit check that is unsafe to // do from this context. ------------- PR: https://git.openjdk.java.net/jdk/pull/8446