mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
8285794: AsyncGetCallTrace might acquire a lock via JavaThread::thread_from_jni_environment
Reviewed-by: dholmes, mdoerr, jbachorik
This commit is contained in:
parent
39f4434f44
commit
d4474b5816
1 changed files with 7 additions and 3 deletions
|
@ -564,10 +564,13 @@ extern "C" {
|
||||||
JNIEXPORT
|
JNIEXPORT
|
||||||
void AsyncGetCallTrace(ASGCT_CallTrace *trace, jint depth, void* ucontext) {
|
void AsyncGetCallTrace(ASGCT_CallTrace *trace, jint depth, void* ucontext) {
|
||||||
|
|
||||||
|
// Can't use thread_from_jni_environment as it may also perform a VM exit check that is unsafe to
|
||||||
|
// do from this context.
|
||||||
|
Thread* raw_thread = Thread::current_or_null_safe();
|
||||||
JavaThread* thread;
|
JavaThread* thread;
|
||||||
|
|
||||||
if (trace->env_id == NULL ||
|
if (trace->env_id == NULL || raw_thread == NULL || !raw_thread->is_Java_thread() ||
|
||||||
(thread = JavaThread::thread_from_jni_environment(trace->env_id))->is_exiting()) {
|
(thread = JavaThread::cast(raw_thread))->is_exiting()) {
|
||||||
// bad env_id, thread has exited or thread is exiting
|
// bad env_id, thread has exited or thread is exiting
|
||||||
trace->num_frames = ticks_thread_exit; // -8
|
trace->num_frames = ticks_thread_exit; // -8
|
||||||
return;
|
return;
|
||||||
|
@ -579,7 +582,8 @@ void AsyncGetCallTrace(ASGCT_CallTrace *trace, jint depth, void* ucontext) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(JavaThread::current() == thread,
|
// This is safe now as the thread has not terminated and so no VM exit check occurs.
|
||||||
|
assert(thread == JavaThread::thread_from_jni_environment(trace->env_id),
|
||||||
"AsyncGetCallTrace must be called by the current interrupted thread");
|
"AsyncGetCallTrace must be called by the current interrupted thread");
|
||||||
|
|
||||||
if (!JvmtiExport::should_post_class_load()) {
|
if (!JvmtiExport::should_post_class_load()) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue