Thread Debugging: Add LWP to core show locks output
authorJonathan Rose <jrose@digium.com>
Fri, 24 Jan 2014 22:34:23 +0000 (22:34 +0000)
committerJonathan Rose <jrose@digium.com>
Fri, 24 Jan 2014 22:34:23 +0000 (22:34 +0000)
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

CHANGES
main/utils.c

diff --git a/CHANGES b/CHANGES
index 5e0cb47..0f0402c 100644 (file)
--- 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 ------------
 ------------------------------------------------------------------------------
index b1a9542..3d8e4c2 100644 (file)
@@ -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);