summaryrefslogtreecommitdiff
path: root/runtime/thread.cc
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/thread.cc')
-rw-r--r--runtime/thread.cc15
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.