From 5a0b4592eb0edb4329f8c6c78f582a46ec3ad9a6 Mon Sep 17 00:00:00 2001 From: phintuka Date: Thu, 21 Dec 2006 08:07:24 +0000 Subject: Added small description and pthread_mutex_trylock wrapper --- tools/debug_mutex.h | 75 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 69 insertions(+), 6 deletions(-) diff --git a/tools/debug_mutex.h b/tools/debug_mutex.h index dc25ec7e..38bb12ce 100644 --- a/tools/debug_mutex.h +++ b/tools/debug_mutex.h @@ -4,7 +4,7 @@ * See the main source file 'xineliboutput.c' for copyright information and * how to reach the author. * - * $Id: debug_mutex.h,v 1.1 2006-12-19 17:21:50 phintuka Exp $ + * $Id: debug_mutex.h,v 1.2 2006-12-21 08:07:24 phintuka Exp $ * */ @@ -15,20 +15,44 @@ # error pthread.h must be included before debug_mutex.h #endif +/* + * Override pthread_mutex_ calls: + * + * Change type of each mutex to PTHREAD_MUTEX_ERRORCHECK_NP + * + * Store line number of last succeed pthread_mutex_lock call + * for each initialized mutex + * + * Check every pthread_mutex_ call for errors and log all errors + * + * To help detecting deadlocks and minimize logging: + * - Try locking first in pthread_mutex_lock + * - If pthread_mutex_trylock fails, log a message and retry. + * - When trylock failed, log another message when lock is acquired. + * + * + * NOTE: debugging itself is not thread-safe and may indicate wrong line numbers ! + * + */ + +#define MAX_DBG_MUTEX 64 static struct { pthread_mutex_t *lock; int line; -} dbgdata[64] = {{NULL,0}}; +} dbgdata[MAX_DBG_MUTEX+1] = {{NULL,0}}; static void dbg_setdata(pthread_mutex_t *mutex, int line) { int i; - for(i=0; i<32; i++) + for(i=0; i