diff options
| -rw-r--r-- | src/monitor.cc | 21 | ||||
| -rw-r--r-- | src/thread.cc | 18 | ||||
| -rw-r--r-- | src/thread.h | 1 |
3 files changed, 20 insertions, 20 deletions
diff --git a/src/monitor.cc b/src/monitor.cc index 50deba6665..dde67ea9da 100644 --- a/src/monitor.cc +++ b/src/monitor.cc @@ -32,6 +32,7 @@ #include "stl_util.h" #include "thread.h" #include "thread_list.h" +#include "well_known_classes.h" namespace art { @@ -823,6 +824,24 @@ uint32_t Monitor::GetThinLockId(uint32_t raw_lock_word) { } } +static uint32_t LockOwnerFromThreadLock(Object* thread_lock) { + if (thread_lock == NULL || thread_lock->GetClass() != WellKnownClasses::ToClass(WellKnownClasses::java_lang_ThreadLock)) { + return ThreadList::kInvalidId; + } + Field* thread_field = DecodeField(WellKnownClasses::java_lang_ThreadLock_thread); + Object* managed_thread = thread_field->GetObject(thread_lock); + if (managed_thread == NULL) { + return ThreadList::kInvalidId; + } + Field* vmData_field = DecodeField(WellKnownClasses::java_lang_Thread_vmData); + uintptr_t vmData = static_cast<uintptr_t>(vmData_field->GetInt(managed_thread)); + Thread* thread = reinterpret_cast<Thread*>(vmData); + if (thread == NULL) { + return ThreadList::kInvalidId; + } + return thread->GetThinLockId(); +} + void Monitor::DescribeWait(std::ostream& os, const Thread* thread) { ThreadState state = thread->GetState(); @@ -834,7 +853,7 @@ void Monitor::DescribeWait(std::ostream& os, const Thread* thread) { if (monitor != NULL) { object = monitor->obj_; } - lock_owner = Thread::LockOwnerFromThreadLock(object); + lock_owner = LockOwnerFromThreadLock(object); } else if (state == kBlocked) { os << " - waiting to lock "; object = thread->monitor_enter_object_; diff --git a/src/thread.cc b/src/thread.cc index e682487519..a8ba701c5a 100644 --- a/src/thread.cc +++ b/src/thread.cc @@ -765,24 +765,6 @@ void Thread::Shutdown() { CHECK_PTHREAD_CALL(pthread_key_delete, (Thread::pthread_key_self_), "self key"); } -uint32_t Thread::LockOwnerFromThreadLock(Object* thread_lock) { - if (thread_lock == NULL || thread_lock->GetClass() != WellKnownClasses::ToClass(WellKnownClasses::java_lang_ThreadLock)) { - return ThreadList::kInvalidId; - } - Field* thread_field = DecodeField(WellKnownClasses::java_lang_ThreadLock_thread); - Object* managed_thread = thread_field->GetObject(thread_lock); - if (managed_thread == NULL) { - return ThreadList::kInvalidId; - } - Field* vmData_field = DecodeField(WellKnownClasses::java_lang_Thread_vmData); - uintptr_t vmData = static_cast<uintptr_t>(vmData_field->GetInt(managed_thread)); - Thread* thread = reinterpret_cast<Thread*>(vmData); - if (thread == NULL) { - return ThreadList::kInvalidId; - } - return thread->GetThinLockId(); -} - Thread::Thread() : suspend_count_(0), card_table_(NULL), diff --git a/src/thread.h b/src/thread.h index 6904d4ac4c..5ff0414ab1 100644 --- a/src/thread.h +++ b/src/thread.h @@ -112,7 +112,6 @@ class PACKED Thread { static Thread* FromManagedThread(Object* thread_peer); static Thread* FromManagedThread(JNIEnv* env, jobject thread); - static uint32_t LockOwnerFromThreadLock(Object* thread_lock); // Translates 172 to pAllocArrayFromCode and so on. static void DumpThreadOffset(std::ostream& os, uint32_t offset, size_t size_of_pointers); |