diff --git a/CHANGES b/CHANGES index 5e0cb47f89ff7f788a49c99b3684670a8a391560..0f0402cd25aa28be7706dfb4b159b72921f718c3 100644 --- a/CHANGES +++ b/CHANGES @@ -73,6 +73,11 @@ MixMonitor * A new function, MIXMONITOR, has been added to allow access to individual instances of MixMonitor on a channel. +Debugging +------------------------- + * Core Show Locks output now includes Thread/LWP ID if the platform + supports this feature. + ------------------------------------------------------------------------------ --- Functionality changes from Asterisk 12.0.0 to Asterisk 12.1.0 ------------ ------------------------------------------------------------------------------ diff --git a/main/utils.c b/main/utils.c index b1a95425c503a76cd317eb76bb8222c5132ea82c..3d8e4c261ffa4196df7ca98d8c9843aa73555e40 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);