summaryrefslogtreecommitdiff
path: root/main/utils.c
diff options
context:
space:
mode:
authorJonathan Rose <jrose@digium.com>2014-01-24 22:34:23 +0000
committerJonathan Rose <jrose@digium.com>2014-01-24 22:34:23 +0000
commit2a9d15b4005f48ddddc41f609b3fa545b436a6ac (patch)
tree15908feaffc44e2ca6d4a625ae89aea74b50772a /main/utils.c
parenta9911f027e09167c2653b7c301136287322dbccc (diff)
Thread Debugging: Add LWP to core show locks output
This patch adds the LWP to core show locks output if it is available. Review: https://reviewboard.asterisk.org/r/3142/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@406416 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/utils.c')
-rw-r--r--main/utils.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/main/utils.c b/main/utils.c
index b1a95425c..3d8e4c261 100644
--- a/main/utils.c
+++ b/main/utils.c
@@ -589,11 +589,11 @@ struct thr_lock_info {
/*! This is the actual container of info for what locks this thread holds */
struct {
const char *file;
- int line_num;
const char *func;
const char *lock_name;
void *lock_addr;
int times_locked;
+ int line_num;
enum ast_lock_type type;
/*! This thread is waiting on this lock */
int pending:2;
@@ -607,6 +607,8 @@ struct thr_lock_info {
* The index (num_locks - 1) has the info on the last one in the
* locks member */
unsigned int num_locks;
+ /*! The LWP id (which GDB prints) */
+ int lwp;
/*! Protects the contents of the locks member
* Intentionally not ast_mutex_t */
pthread_mutex_t lock;
@@ -1049,8 +1051,13 @@ struct ast_str *ast_dump_locks(void)
}
if (!header_printed) {
- ast_str_append(&str, 0, "=== Thread ID: 0x%lx (%s)\n", (long) lock_info->thread_id,
- lock_info->thread_name);
+ if (lock_info->lwp != -1) {
+ ast_str_append(&str, 0, "=== Thread ID: 0x%lx LWP:%d (%s)\n",
+ (long) lock_info->thread_id, lock_info->lwp, lock_info->thread_name);
+ } else {
+ ast_str_append(&str, 0, "=== Thread ID: 0x%lx (%s)\n",
+ (long) lock_info->thread_id, lock_info->thread_name);
+ }
header_printed = 1;
}
@@ -1145,6 +1152,7 @@ static void *dummy_start(void *data)
return NULL;
lock_info->thread_id = pthread_self();
+ lock_info->lwp = ast_get_tid();
lock_info->thread_name = strdup(a.name);
pthread_mutexattr_init(&mutex_attr);