diff options
Diffstat (limited to 'runtime/thread.cc')
| -rw-r--r-- | runtime/thread.cc | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/runtime/thread.cc b/runtime/thread.cc index 40b6d73d94..bf69e1010d 100644 --- a/runtime/thread.cc +++ b/runtime/thread.cc @@ -431,7 +431,10 @@ void* Thread::CreateCallback(void* arg) { ArtField* priorityField = jni::DecodeArtField(WellKnownClasses::java_lang_Thread_priority); self->SetNativePriority(priorityField->GetInt(self->tlsPtr_.opeer)); - Dbg::PostThreadStart(self); + { + ReaderMutexLock mu(self, *Locks::runtime_callbacks_lock_); + runtime->GetRuntimeCallbacks().ThreadStart(self); + } // Invoke the 'run' method of our java.lang.Thread. ObjPtr<mirror::Object> receiver = self->tlsPtr_.opeer; @@ -793,7 +796,8 @@ Thread* Thread::Attach(const char* thread_name, bool as_daemon, jobject thread_g { ScopedObjectAccess soa(self); - Dbg::PostThreadStart(self); + ReaderMutexLock mu(self, *Locks::runtime_callbacks_lock_); + runtime->GetRuntimeCallbacks().ThreadStart(self); } return self; @@ -1929,7 +1933,12 @@ void Thread::Destroy() { jni::DecodeArtField(WellKnownClasses::java_lang_Thread_nativePeer) ->SetLong<false>(tlsPtr_.opeer, 0); } - Dbg::PostThreadDeath(self); + Runtime* runtime = Runtime::Current(); + if (runtime != nullptr) { + ReaderMutexLock mu(self, *Locks::runtime_callbacks_lock_); + runtime->GetRuntimeCallbacks().ThreadDeath(self); + } + // Thread.join() is implemented as an Object.wait() on the Thread.lock object. Signal anyone // who is waiting. |