Merged revisions 91830 via svnmerge from
authorRussell Bryant <russell@russellbryant.com>
Fri, 7 Dec 2007 21:25:03 +0000 (21:25 +0000)
committerRussell Bryant <russell@russellbryant.com>
Fri, 7 Dec 2007 21:25:03 +0000 (21:25 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r91830 | russell | 2007-12-07 15:24:33 -0600 (Fri, 07 Dec 2007) | 5 lines

Make the lock protecting each thread's list of locks it currently holds
recursive.  I think that this will fix the situation where some people have
said that "core show locks" locks up the CLI.
(related to issue #11080)

........

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@91831 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/utils.c

index 949ed10..ddd5f0e 100644 (file)
@@ -825,6 +825,7 @@ static void *dummy_start(void *data)
        struct thr_arg a = *((struct thr_arg *) data);  /* make a local copy */
 #ifdef DEBUG_THREADS
        struct thr_lock_info *lock_info;
        struct thr_arg a = *((struct thr_arg *) data);  /* make a local copy */
 #ifdef DEBUG_THREADS
        struct thr_lock_info *lock_info;
+       pthread_mutexattr_t mutex_attr;
 #endif
 
        /* note that even though data->name is a pointer to allocated memory,
 #endif
 
        /* note that even though data->name is a pointer to allocated memory,
@@ -842,7 +843,11 @@ static void *dummy_start(void *data)
 
        lock_info->thread_id = pthread_self();
        lock_info->thread_name = strdup(a.name);
 
        lock_info->thread_id = pthread_self();
        lock_info->thread_name = strdup(a.name);
-       pthread_mutex_init(&lock_info->lock, NULL);
+
+       pthread_mutexattr_init(&mutex_attr);
+       pthread_mutexattr_settype(&mutex_attr, AST_MUTEX_KIND);
+       pthread_mutex_init(&lock_info->lock, &mutex_attr);
+       pthread_mutexattr_destroy(&mutex_attr);
 
        pthread_mutex_lock(&lock_infos_lock.mutex); /* Intentionally not the wrapper */
        AST_LIST_INSERT_TAIL(&lock_infos, lock_info, entry);
 
        pthread_mutex_lock(&lock_infos_lock.mutex); /* Intentionally not the wrapper */
        AST_LIST_INSERT_TAIL(&lock_infos, lock_info, entry);