diff options
author | Andy McFadden <fadden@android.com> | 2010-03-12 13:39:59 -0800 |
---|---|---|
committer | Andy McFadden <fadden@android.com> | 2010-03-15 11:59:23 -0700 |
commit | 0a24ef9d1a88984dae3f7a9bf431c82626eadb2e (patch) | |
tree | 8db67ef0dba186d7099850ea0eec6cbe45b20cba /vm/Sync.h | |
parent | fcfb52201103bf732a6233ea45daaa65e253543b (diff) | |
download | android_dalvik-0a24ef9d1a88984dae3f7a9bf431c82626eadb2e.tar.gz android_dalvik-0a24ef9d1a88984dae3f7a9bf431c82626eadb2e.tar.bz2 android_dalvik-0a24ef9d1a88984dae3f7a9bf431c82626eadb2e.zip |
Try to show lock owner in MONITOR thread dump.
A thread in the MONITOR state is blocked waiting on a monitor. This
raises two interesting questions: (1) what lock is it waiting on, and
(2) who holds that lock? The answer to (1) can be determined easily by
looking at the source code, but (2) is a bit harder.
This change extracts the target object from the instruction stream and
prints some information about it, e.g.:
- waiting to lock <0x40028c68> (a java.lang.Object) held by threadid=1 (main)
Also: fiddled with "must [not] be locked" on a recently-added function.
(cherry-picked from dalvik-dev)
Change-Id: Ic16695741760d50be70e70fb7470972cef28bb09
Diffstat (limited to 'vm/Sync.h')
-rw-r--r-- | vm/Sync.h | 8 |
1 files changed, 8 insertions, 0 deletions
@@ -141,6 +141,14 @@ void dvmFreeMonitorList(void); struct Object* dvmGetMonitorObject(Monitor* mon); /* + * Get the thread that holds the lock on the specified object. The + * object may be unlocked, thin-locked, or fat-locked. + * + * The caller must lock the thread list before calling here. + */ +struct Thread* dvmGetObjectLockHolder(struct Object* obj); + +/* * Checks whether the object is held by the specified thread. */ bool dvmHoldsLock(struct Thread* thread, struct Object* obj); |