From fa5b035710c6921361c1e6342da436c689dba0a2 Mon Sep 17 00:00:00 2001 From: pk910 Date: Sat, 10 Nov 2012 17:44:45 +0100 Subject: [PATCH] added possibility to list all known mutexes in mutexDebug.c --- src/mutexDebug.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/mutexDebug.c b/src/mutexDebug.c index 1170791..1b1e784 100644 --- a/src/mutexDebug.c +++ b/src/mutexDebug.c @@ -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 -- 2.20.1