added possibility to list all known mutexes in mutexDebug.c
authorpk910 <philipp@zoelle1.de>
Sat, 10 Nov 2012 16:44:45 +0000 (17:44 +0100)
committerpk910 <philipp@zoelle1.de>
Sat, 10 Nov 2012 16:46:14 +0000 (17:46 +0100)
src/mutexDebug.c

index 11707917af300a5a0a5fd50c36c2e6d36f87abc5..1b1e784b609a967ed8c89555a80678e032efd8c7 100644 (file)
@@ -45,6 +45,7 @@ static struct MutexNode *mutex_nodes = NULL;
 static struct MutexNode *getMutexNode(pthread_mutex_t *mutex, int create);
 static void lockMutex(struct MutexNode *node, const char *file, unsigned int line);
 static void unlockMutex(struct MutexNode *node, const char *file, unsigned int line);
+static void mutex_replay(struct MutexNode *node);
 
 void xmutex(int lock, pthread_mutex_t *mutex, const char *file, unsigned int line) {
     pthread_mutex_lock(&synchronized);
@@ -158,11 +159,23 @@ static void unlockMutex(struct MutexNode *node, const char *file, unsigned int l
 
 void mutex_debug(pthread_mutex_t *mutex) {
     //replay mutex events to stdout
-    struct MutexNode *node = getMutexNode(mutex, 0);
-    if(!node) {
-        printf("[MUTEX_DEBUG] unknown mutex!\n");
-        return;
+    struct MutexNode *node;
+    if(mutex) {
+        node = getMutexNode(mutex, 0);
+        if(!node) {
+            printf("[MUTEX_DEBUG] unknown mutex!\n");
+            return;
+        }
+        mutex_replay(node);
+    } else {
+        for(node = mutex_nodes; node; node = node->next) {
+            mutex_replay(node);
+        }
     }
+    printf("[MUTEX_DEBUG] end of mutex replay.\n");
+}
+
+static void mutex_replay(struct MutexNode *node) {
     printf("[MUTEX_DEBUG] mutex replay:\n");
     struct MutexLock *lock;
     struct MutexLockEvent *event;
@@ -172,7 +185,6 @@ void mutex_debug(pthread_mutex_t *mutex) {
             printf("[MUTEX_DEBUG]   %s in %s:%d\n", (event->locked ? "lock  " : "unlock"), event->file, event->line);
         }
     }
-    printf("[MUTEX_DEBUG] end of mutex replay.\n");
 }
 
 #endif