aboutsummaryrefslogtreecommitdiffstats
path: root/include/asterisk/lock.h
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2007-08-10 15:20:09 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2007-08-10 15:20:09 +0000
commit12eabd50d4114caf259ad2e0af52bc79076a15b2 (patch)
treea36c611a6e3137663f969015d08ce8107cbf4efc /include/asterisk/lock.h
parent2bd090db6873b71821b7ce7b16e45d76b6f55104 (diff)
The last set of changes that I made to "core show locks" made it not able to
track mutexes unless they were declared using AST_MUTEX_DEFINE_STATIC. Locks initialized with ast_mutex_init() were not tracked. It should work now. git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@78995 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'include/asterisk/lock.h')
-rw-r--r--include/asterisk/lock.h26
1 files changed, 17 insertions, 9 deletions
diff --git a/include/asterisk/lock.h b/include/asterisk/lock.h
index bb1c16f19..c261b7d33 100644
--- a/include/asterisk/lock.h
+++ b/include/asterisk/lock.h
@@ -155,7 +155,7 @@ static void __attribute__((constructor)) init_empty_mutex(void)
memset(&empty_mutex, 0, sizeof(empty_mutex));
}
-static inline int __ast_pthread_mutex_init_attr(const char *filename, int lineno, const char *func,
+static inline int __ast_pthread_mutex_init_attr(int track, const char *filename, int lineno, const char *func,
const char *mutex_name, ast_mutex_t *t,
pthread_mutexattr_t *attr)
{
@@ -179,11 +179,12 @@ static inline int __ast_pthread_mutex_init_attr(const char *filename, int lineno
t->func[0] = func;
t->thread[0] = 0;
t->reentrancy = 0;
+ t->track = track;
return pthread_mutex_init(&t->mutex, attr);
}
-static inline int __ast_pthread_mutex_init(const char *filename, int lineno, const char *func,
+static inline int __ast_pthread_mutex_init(int track, const char *filename, int lineno, const char *func,
const char *mutex_name, ast_mutex_t *t)
{
static pthread_mutexattr_t attr;
@@ -191,9 +192,11 @@ static inline int __ast_pthread_mutex_init(const char *filename, int lineno, con
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, AST_MUTEX_KIND);
- return __ast_pthread_mutex_init_attr(filename, lineno, func, mutex_name, t, &attr);
+ return __ast_pthread_mutex_init_attr(track, filename, lineno, func, mutex_name, t, &attr);
}
-#define ast_mutex_init(pmutex) __ast_pthread_mutex_init(__FILE__, __LINE__, __PRETTY_FUNCTION__, #pmutex, pmutex)
+#define ast_mutex_init(pmutex) __ast_pthread_mutex_init(1, __FILE__, __LINE__, __PRETTY_FUNCTION__, #pmutex, pmutex)
+#define ast_mutex_init_notracking(pmutex) \
+ __ast_pthread_mutex_init(0, __FILE__, __LINE__, __PRETTY_FUNCTION__, #pmutex, pmutex)
static inline int __ast_pthread_mutex_destroy(const char *filename, int lineno, const char *func,
const char *mutex_name, ast_mutex_t *t)
@@ -564,6 +567,8 @@ typedef pthread_mutex_t ast_mutex_t;
#define AST_MUTEX_INIT_VALUE_NOTRACKING \
((ast_mutex_t) PTHREAD_MUTEX_INIT_VALUE)
+#define ast_mutex_init_notracking(m) ast_mutex_init(m)
+
static inline int ast_mutex_init(ast_mutex_t *pmutex)
{
pthread_mutexattr_t attr;
@@ -633,11 +638,14 @@ static inline int ast_cond_timedwait(ast_cond_t *cond, ast_mutex_t *t, const str
#if defined(AST_MUTEX_INIT_W_CONSTRUCTORS)
/* If AST_MUTEX_INIT_W_CONSTRUCTORS is defined, use file scope
constructors/destructors to create/destroy mutexes. */
-#define __AST_MUTEX_DEFINE(scope, mutex, init_val) \
+#define __AST_MUTEX_DEFINE(scope, mutex, init_val, track) \
scope ast_mutex_t mutex = init_val; \
static void __attribute__ ((constructor)) init_##mutex(void) \
{ \
- ast_mutex_init(&mutex); \
+ if (track) \
+ ast_mutex_init(&mutex); \
+ else \
+ ast_mutex_init_notracking(&mutex); \
} \
static void __attribute__ ((destructor)) fini_##mutex(void) \
{ \
@@ -645,7 +653,7 @@ static void __attribute__ ((destructor)) fini_##mutex(void) \
}
#else /* !AST_MUTEX_INIT_W_CONSTRUCTORS */
/* By default, use static initialization of mutexes. */
-#define __AST_MUTEX_DEFINE(scope, mutex, init_val) \
+#define __AST_MUTEX_DEFINE(scope, mutex, init_val, track) \
scope ast_mutex_t mutex = init_val
#endif /* AST_MUTEX_INIT_W_CONSTRUCTORS */
@@ -663,8 +671,8 @@ static void __attribute__ ((destructor)) fini_##mutex(void) \
#define pthread_cond_wait use_ast_cond_wait_instead_of_pthread_cond_wait
#define pthread_cond_timedwait use_ast_cond_timedwait_instead_of_pthread_cond_timedwait
-#define AST_MUTEX_DEFINE_STATIC(mutex) __AST_MUTEX_DEFINE(static, mutex, AST_MUTEX_INIT_VALUE)
-#define AST_MUTEX_DEFINE_STATIC_NOTRACKING(mutex) __AST_MUTEX_DEFINE(static, mutex, AST_MUTEX_INIT_VALUE_NOTRACKING)
+#define AST_MUTEX_DEFINE_STATIC(mutex) __AST_MUTEX_DEFINE(static, mutex, AST_MUTEX_INIT_VALUE, 1)
+#define AST_MUTEX_DEFINE_STATIC_NOTRACKING(mutex) __AST_MUTEX_DEFINE(static, mutex, AST_MUTEX_INIT_VALUE_NOTRACKING, 0)
#define AST_MUTEX_INITIALIZER __use_AST_MUTEX_DEFINE_STATIC_rather_than_AST_MUTEX_INITIALIZER__