[asterisk-commits] russell: trunk r86839 - in /trunk: ./ include/asterisk/lock.h
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Mon Oct 22 16:37:58 CDT 2007
Author: russell
Date: Mon Oct 22 16:37:58 2007
New Revision: 86839
URL: http://svn.digium.com/view/asterisk?view=rev&rev=86839
Log:
Merged revisions 86836 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r86836 | russell | 2007-10-22 16:36:12 -0500 (Mon, 22 Oct 2007) | 9 lines
If lock tracking is not enabled, then we can not attempt to log any mutex
failures. If so, we could end up in infinite recursion. The only lock that
is affected by this is a mutex in astmm.c used when MALLOC_DEBUG is enabled.
(closes issue #11044)
Reported by: ys
Patches:
lock.h.diff uploaded by ys (license 281)
........
Modified:
trunk/ (props changed)
trunk/include/asterisk/lock.h
Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.
Modified: trunk/include/asterisk/lock.h
URL: http://svn.digium.com/view/asterisk/trunk/include/asterisk/lock.h?view=diff&rev=86839&r1=86838&r2=86839
==============================================================================
--- trunk/include/asterisk/lock.h (original)
+++ trunk/include/asterisk/lock.h Mon Oct 22 16:37:58 2007
@@ -206,15 +206,19 @@
const char *mutex_name, ast_mutex_t *t,
pthread_mutexattr_t *attr)
{
+
#ifdef AST_MUTEX_INIT_W_CONSTRUCTORS
- int canlog = strcmp(filename, "logger.c");
+ int canlog = strcmp(filename, "logger.c") && track;
if ((t->mutex) != ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) {
if ((t->mutex) != (empty_mutex)) {
__ast_mutex_logger("%s line %d (%s): Error: mutex '%s' is already initialized.\n",
filename, lineno, func, mutex_name);
- __ast_mutex_logger("%s line %d (%s): Error: previously initialization of mutex '%s'.\n",
+ /* Don't print track info about nontracked mutex */
+ if (track) {
+ __ast_mutex_logger("%s line %d (%s): Error: previously initialization of mutex '%s'.\n",
t->file[0], t->lineno[0], t->func[0], mutex_name);
+ }
DO_THREAD_CRASH;
return 0;
}
@@ -248,9 +252,11 @@
int canlog = strcmp(filename, "logger.c");
#ifdef AST_MUTEX_INIT_W_CONSTRUCTORS
+ canlog &= t->track;
if ((t->mutex) == ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) {
__ast_mutex_logger("%s line %d (%s): Error: mutex '%s' is uninitialized.\n",
filename, lineno, func, mutex_name);
+ return 0; /* mutex is uninitialized */
}
#endif
@@ -302,10 +308,13 @@
ast_store_lock_info(AST_MUTEX, filename, lineno, func, mutex_name, &t->mutex);
#if defined(AST_MUTEX_INIT_W_CONSTRUCTORS)
+ canlog &= t->track;
+
if ((t->mutex) == ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) {
__ast_mutex_logger("%s line %d (%s): Error: mutex '%s' is uninitialized.\n",
filename, lineno, func, mutex_name);
- ast_mutex_init(t);
+ __ast_pthread_mutex_init(t->track, filename, lineno, func, mutex_name, t);
+
}
#endif /* AST_MUTEX_INIT_W_CONSTRUCTORS */
@@ -379,10 +388,12 @@
int canlog = strcmp(filename, "logger.c");
#if defined(AST_MUTEX_INIT_W_CONSTRUCTORS)
+ canlog &= t->track;
+
if ((t->mutex) == ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) {
__ast_mutex_logger("%s line %d (%s): Error: mutex '%s' is uninitialized.\n",
filename, lineno, func, mutex_name);
- ast_mutex_init(t);
+ __ast_pthread_mutex_init(t->track, filename, lineno, func, mutex_name, t);
}
#endif /* AST_MUTEX_INIT_W_CONSTRUCTORS */
@@ -418,6 +429,8 @@
int canlog = strcmp(filename, "logger.c");
#ifdef AST_MUTEX_INIT_W_CONSTRUCTORS
+ canlog &= t->track;
+
if ((t->mutex) == ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) {
__ast_mutex_logger("%s line %d (%s): Error: mutex '%s' is uninitialized.\n",
filename, lineno, func, mutex_name);
@@ -491,6 +504,7 @@
int canlog = strcmp(filename, "logger.c");
#ifdef AST_MUTEX_INIT_W_CONSTRUCTORS
+ canlog &= t->track;
if ((t->mutex) == ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) {
__ast_mutex_logger("%s line %d (%s): Error: mutex '%s' is uninitialized.\n",
filename, lineno, func, mutex_name);
@@ -556,6 +570,7 @@
int canlog = strcmp(filename, "logger.c");
#ifdef AST_MUTEX_INIT_W_CONSTRUCTORS
+ canlog &= t->track;
if ((t->mutex) == ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) {
__ast_mutex_logger("%s line %d (%s): Error: mutex '%s' is uninitialized.\n",
filename, lineno, func, mutex_name);
More information about the asterisk-commits
mailing list