diff options
Diffstat (limited to 'openjdkjvmti/OpenjdkJvmTi.cc')
-rw-r--r-- | openjdkjvmti/OpenjdkJvmTi.cc | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/openjdkjvmti/OpenjdkJvmTi.cc b/openjdkjvmti/OpenjdkJvmTi.cc index 39e49d7071..7a2b638fd9 100644 --- a/openjdkjvmti/OpenjdkJvmTi.cc +++ b/openjdkjvmti/OpenjdkJvmTi.cc @@ -1053,9 +1053,22 @@ class JvmtiFunctions { jthread event_thread, ...) { ENSURE_VALID_ENV(env); + art::Thread* art_thread = nullptr; + if (event_thread != nullptr) { + // TODO The locking around this call is less then what we really want. + art::ScopedObjectAccess soa(art::Thread::Current()); + art::MutexLock mu(soa.Self(), *art::Locks::thread_list_lock_); + jvmtiError err = ERR(INTERNAL); + if (!ThreadUtil::GetAliveNativeThread(event_thread, soa, &art_thread, &err)) { + return err; + } else if (art_thread->IsStillStarting()) { + return ERR(THREAD_NOT_ALIVE); + } + } + ArtJvmTiEnv* art_env = ArtJvmTiEnv::AsArtJvmTiEnv(env); return gEventHandler->SetEvent(art_env, - event_thread, + art_thread, GetArtJvmtiEvent(art_env, event_type), mode); } |