On Thu, 28 Apr 2022 11:15:34 GMT, David Holmes <[email protected]> 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