Hi all,
I am working on a multi-thread application hang problem on Solaris. Stack trace
shows that a thread is trying to grep a mutex by calling:
----------------- lwp# 12 / thread# 11 --------------------
ff11f7f8 lwp_mutex_lock (fe7a73c8)
ff26ae80 _mutex_lwp_lock (ff299218, ff28c000, ffffabcd, 561b94, fe7a73c8, 0) +
4
....
Then it sits there and waits forever for mutex (fe7a73c8), the resources hold by
this thread (lwp# 12) blocks other threads, and thus cause the entire
application to hang.
I am just wondering if there are any methods to print out the information about
mutex (fe7a73c8) so that it tells what ** THREAD ** within the application is
holding such mutex. Ideally, I can add those diagnostic codes into the
application, it then collects those mutex information when the problem
re-occurs, and allows me to further investigate the problem.
According to /usr/include/sys/synch.h, the mutex structure is defined as:
typedef struct _lwp_mutex {
struct _mutex_flags {
uint8_t flag[4];
uint16_t type;
uint16_t magic;
} flags;
union _mutex_lock_un {
struct _mutex_lock {
uint8_t pad[8];
} lock64;
upad64_t owner64;
} lock;
upad64_t data;
} lwp_mutex_t;
I don''t know what field in the above structure that stores the thread
id holding the mutex.
Any suggestions/help are highly appreciated.
Zhi Huang
--
This message posted from opensolaris.org