diff --git a/include/asterisk/lock.h b/include/asterisk/lock.h index b409a27a1bb188748068b56dd018448976e814ab..3cf6f164389249b14e48490f74904792c03a712b 100644 --- a/include/asterisk/lock.h +++ b/include/asterisk/lock.h @@ -241,8 +241,6 @@ int __ast_rwlock_trywrlock(const char *filename, int lineno, const char *func, a #ifdef DEBUG_THREADS -#define __ast_mutex_logger(...) do { if (canlog) ast_log(LOG_ERROR, __VA_ARGS__); else fprintf(stderr, __VA_ARGS__); } while (0) - #ifdef THREAD_CRASH #define DO_THREAD_CRASH do { *((int *)(0)) = 1; } while(0) #else diff --git a/main/lock.c b/main/lock.c index 5ad9e134b7cf40450c795eb2b201c1be26507017..fcf0839f405a3ef76ff492586cc53856679b38eb 100644 --- a/main/lock.c +++ b/main/lock.c @@ -53,6 +53,17 @@ static void __attribute__((constructor)) __mtx_init(void) #undef pthread_cond_wait #undef pthread_cond_timedwait +#if defined(DEBUG_THREADS) +#define log_mutex_error(canlog, ...) \ + do { \ + if (canlog) { \ + ast_log(LOG_ERROR, __VA_ARGS__); \ + } else { \ + fprintf(stderr, __VA_ARGS__); \ + } \ + } while (0) +#endif + #if defined(DEBUG_THREADS) && defined(HAVE_BKTR) static void __dump_backtrace(struct ast_bt *bt, int canlog) { @@ -62,7 +73,7 @@ static void __dump_backtrace(struct ast_bt *bt, int canlog) strings = backtrace_symbols(bt->addresses, bt->num_frames); for (i = 0; i < bt->num_frames; i++) { - __ast_mutex_logger("%s\n", strings[i]); + log_mutex_error(canlog, "%s\n", strings[i]); } ast_std_free(strings); @@ -141,7 +152,7 @@ int __ast_pthread_mutex_init(int tracking, const char *filename, int lineno, con if ((t->mutex) != ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) { int canlog = tracking && strcmp(filename, "logger.c"); - __ast_mutex_logger("%s line %d (%s): NOTICE: mutex '%s' is already initialized.\n", + log_mutex_error(canlog, "%s line %d (%s): NOTICE: mutex '%s' is already initialized.\n", filename, lineno, func, mutex_name); DO_THREAD_CRASH; return EBUSY; @@ -178,7 +189,7 @@ int __ast_pthread_mutex_destroy(const char *filename, int lineno, const char *fu * linked with libpthread. * This is not an error condition if the mutex is created on the fly. */ - __ast_mutex_logger("%s line %d (%s): NOTICE: mutex '%s' is uninitialized.\n", + log_mutex_error(canlog, "%s line %d (%s): NOTICE: mutex '%s' is uninitialized.\n", filename, lineno, func, mutex_name); DO_THREAD_CRASH; res = EINVAL; @@ -192,15 +203,15 @@ int __ast_pthread_mutex_destroy(const char *filename, int lineno, const char *fu pthread_mutex_unlock(&t->mutex); break; case EINVAL: - __ast_mutex_logger("%s line %d (%s): Error: attempt to destroy invalid mutex '%s'.\n", + log_mutex_error(canlog, "%s line %d (%s): Error: attempt to destroy invalid mutex '%s'.\n", filename, lineno, func, mutex_name); break; case EBUSY: - __ast_mutex_logger("%s line %d (%s): Error: attempt to destroy locked mutex '%s'.\n", + log_mutex_error(canlog, "%s line %d (%s): Error: attempt to destroy locked mutex '%s'.\n", filename, lineno, func, mutex_name); if (lt) { ast_reentrancy_lock(lt); - __ast_mutex_logger("%s line %d (%s): Error: '%s' was locked here.\n", + log_mutex_error(canlog, "%s line %d (%s): Error: '%s' was locked here.\n", lt->file[ROFFSET], lt->lineno[ROFFSET], lt->func[ROFFSET], mutex_name); #ifdef HAVE_BKTR __dump_backtrace(<->backtrace[ROFFSET], canlog); @@ -215,7 +226,7 @@ int __ast_pthread_mutex_destroy(const char *filename, int lineno, const char *fu #ifdef DEBUG_THREADS if (res) { - __ast_mutex_logger("%s line %d (%s): Error destroying mutex %s: %s\n", + log_mutex_error(canlog, "%s line %d (%s): Error destroying mutex %s: %s\n", filename, lineno, func, mutex_name, strerror(res)); } #if defined(AST_MUTEX_INIT_W_CONSTRUCTORS) && defined(CAN_COMPARE_MUTEX_TO_INIT_VALUE) @@ -284,14 +295,14 @@ int __ast_pthread_mutex_lock(const char *filename, int lineno, const char *func, if (res == EBUSY) { wait_time = time(NULL) - seconds; if (wait_time > reported_wait && (wait_time % 5) == 0) { - __ast_mutex_logger("%s line %d (%s): Deadlock? waited %d sec for mutex '%s'?\n", + log_mutex_error(canlog, "%s line %d (%s): Deadlock? waited %d sec for mutex '%s'?\n", filename, lineno, func, (int) wait_time, mutex_name); if (lt) { ast_reentrancy_lock(lt); #ifdef HAVE_BKTR __dump_backtrace(<->backtrace[lt->reentrancy], canlog); #endif - __ast_mutex_logger("%s line %d (%s): '%s' was locked here.\n", + log_mutex_error(canlog, "%s line %d (%s): '%s' was locked here.\n", lt->file[ROFFSET], lt->lineno[ROFFSET], lt->func[ROFFSET], mutex_name); #ifdef HAVE_BKTR @@ -325,7 +336,7 @@ int __ast_pthread_mutex_lock(const char *filename, int lineno, const char *func, lt->thread_id[lt->reentrancy] = pthread_self(); lt->reentrancy++; } else { - __ast_mutex_logger("%s line %d (%s): '%s' really deep reentrancy!\n", + log_mutex_error(canlog, "%s line %d (%s): '%s' really deep reentrancy!\n", filename, lineno, func, mutex_name); } ast_reentrancy_unlock(lt); @@ -343,7 +354,7 @@ int __ast_pthread_mutex_lock(const char *filename, int lineno, const char *func, ast_remove_lock_info(t, bt); } if (res) { - __ast_mutex_logger("%s line %d (%s): Error obtaining mutex: %s\n", + log_mutex_error(canlog, "%s line %d (%s): Error obtaining mutex: %s\n", filename, lineno, func, strerror(res)); DO_THREAD_CRASH; } @@ -394,7 +405,7 @@ int __ast_pthread_mutex_trylock(const char *filename, int lineno, const char *fu lt->thread_id[lt->reentrancy] = pthread_self(); lt->reentrancy++; } else { - __ast_mutex_logger("%s line %d (%s): '%s' really deep reentrancy!\n", + log_mutex_error(canlog, "%s line %d (%s): '%s' really deep reentrancy!\n", filename, lineno, func, mutex_name); } ast_reentrancy_unlock(lt); @@ -419,7 +430,7 @@ int __ast_pthread_mutex_unlock(const char *filename, int lineno, const char *fun #if defined(AST_MUTEX_INIT_W_CONSTRUCTORS) && defined(CAN_COMPARE_MUTEX_TO_INIT_VALUE) if ((t->mutex) == ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) { - __ast_mutex_logger("%s line %d (%s): Error: mutex '%s' is uninitialized.\n", + log_mutex_error(canlog, "%s line %d (%s): Error: mutex '%s' is uninitialized.\n", filename, lineno, func, mutex_name); DO_THREAD_CRASH; return EINVAL; @@ -430,9 +441,9 @@ int __ast_pthread_mutex_unlock(const char *filename, int lineno, const char *fun if (lt) { ast_reentrancy_lock(lt); if (lt->reentrancy && (lt->thread_id[ROFFSET] != pthread_self())) { - __ast_mutex_logger("%s line %d (%s): attempted unlock mutex '%s' without owning it!\n", + log_mutex_error(canlog, "%s line %d (%s): attempted unlock mutex '%s' without owning it!\n", filename, lineno, func, mutex_name); - __ast_mutex_logger("%s line %d (%s): '%s' was locked here.\n", + log_mutex_error(canlog, "%s line %d (%s): '%s' was locked here.\n", lt->file[ROFFSET], lt->lineno[ROFFSET], lt->func[ROFFSET], mutex_name); #ifdef HAVE_BKTR __dump_backtrace(<->backtrace[ROFFSET], canlog); @@ -441,7 +452,7 @@ int __ast_pthread_mutex_unlock(const char *filename, int lineno, const char *fun } if (--lt->reentrancy < 0) { - __ast_mutex_logger("%s line %d (%s): mutex '%s' freed more times than we've locked!\n", + log_mutex_error(canlog, "%s line %d (%s): mutex '%s' freed more times than we've locked!\n", filename, lineno, func, mutex_name); lt->reentrancy = 0; } @@ -468,7 +479,7 @@ int __ast_pthread_mutex_unlock(const char *filename, int lineno, const char *fun #ifdef DEBUG_THREADS if (res) { - __ast_mutex_logger("%s line %d (%s): Error releasing mutex: %s\n", + log_mutex_error(canlog, "%s line %d (%s): Error releasing mutex: %s\n", filename, lineno, func, strerror(res)); DO_THREAD_CRASH; } @@ -538,7 +549,7 @@ int __ast_cond_wait(const char *filename, int lineno, const char *func, #if defined(AST_MUTEX_INIT_W_CONSTRUCTORS) && defined(CAN_COMPARE_MUTEX_TO_INIT_VALUE) if ((t->mutex) == ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) { - __ast_mutex_logger("%s line %d (%s): Error: mutex '%s' is uninitialized.\n", + log_mutex_error(canlog, "%s line %d (%s): Error: mutex '%s' is uninitialized.\n", filename, lineno, func, mutex_name); DO_THREAD_CRASH; return EINVAL; @@ -549,16 +560,16 @@ int __ast_cond_wait(const char *filename, int lineno, const char *func, if (lt) { ast_reentrancy_lock(lt); if (lt->reentrancy && (lt->thread_id[ROFFSET] != pthread_self())) { - __ast_mutex_logger("%s line %d (%s): attempted wait using mutex '%s' without owning it!\n", + log_mutex_error(canlog, "%s line %d (%s): attempted wait using mutex '%s' without owning it!\n", filename, lineno, func, mutex_name); - __ast_mutex_logger("%s line %d (%s): '%s' was locked here.\n", + log_mutex_error(canlog, "%s line %d (%s): '%s' was locked here.\n", lt->file[ROFFSET], lt->lineno[ROFFSET], lt->func[ROFFSET], mutex_name); #ifdef HAVE_BKTR __dump_backtrace(<->backtrace[ROFFSET], canlog); #endif DO_THREAD_CRASH; } else if (lt->reentrancy <= 0) { - __ast_mutex_logger("%s line %d (%s): attempted wait using an unlocked mutex '%s'\n", + log_mutex_error(canlog, "%s line %d (%s): attempted wait using an unlocked mutex '%s'\n", filename, lineno, func, mutex_name); DO_THREAD_CRASH; } @@ -578,7 +589,7 @@ int __ast_cond_wait(const char *filename, int lineno, const char *func, #ifdef DEBUG_THREADS if (res) { - __ast_mutex_logger("%s line %d (%s): Error waiting on condition mutex '%s'\n", + log_mutex_error(canlog, "%s line %d (%s): Error waiting on condition mutex '%s'\n", filename, lineno, func, strerror(res)); DO_THREAD_CRASH; } else if (lt) { @@ -603,7 +614,7 @@ int __ast_cond_timedwait(const char *filename, int lineno, const char *func, #if defined(AST_MUTEX_INIT_W_CONSTRUCTORS) && defined(CAN_COMPARE_MUTEX_TO_INIT_VALUE) if ((t->mutex) == ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) { - __ast_mutex_logger("%s line %d (%s): Error: mutex '%s' is uninitialized.\n", + log_mutex_error(canlog, "%s line %d (%s): Error: mutex '%s' is uninitialized.\n", filename, lineno, func, mutex_name); DO_THREAD_CRASH; return EINVAL; @@ -614,16 +625,16 @@ int __ast_cond_timedwait(const char *filename, int lineno, const char *func, if (lt) { ast_reentrancy_lock(lt); if (lt->reentrancy && (lt->thread_id[ROFFSET] != pthread_self())) { - __ast_mutex_logger("%s line %d (%s): attempted wait using mutex '%s' without owning it!\n", + log_mutex_error(canlog, "%s line %d (%s): attempted wait using mutex '%s' without owning it!\n", filename, lineno, func, mutex_name); - __ast_mutex_logger("%s line %d (%s): '%s' was locked here.\n", + log_mutex_error(canlog, "%s line %d (%s): '%s' was locked here.\n", lt->file[ROFFSET], lt->lineno[ROFFSET], lt->func[ROFFSET], mutex_name); #ifdef HAVE_BKTR __dump_backtrace(<->backtrace[ROFFSET], canlog); #endif DO_THREAD_CRASH; } else if (lt->reentrancy <= 0) { - __ast_mutex_logger("%s line %d (%s): attempted wait using an unlocked mutex '%s'\n", + log_mutex_error(canlog, "%s line %d (%s): attempted wait using an unlocked mutex '%s'\n", filename, lineno, func, mutex_name); DO_THREAD_CRASH; } @@ -643,7 +654,7 @@ int __ast_cond_timedwait(const char *filename, int lineno, const char *func, #ifdef DEBUG_THREADS if (res && (res != ETIMEDOUT)) { - __ast_mutex_logger("%s line %d (%s): Error waiting on condition mutex '%s'\n", + log_mutex_error(canlog, "%s line %d (%s): Error waiting on condition mutex '%s'\n", filename, lineno, func, strerror(res)); DO_THREAD_CRASH; } else if (lt) { @@ -665,7 +676,7 @@ int __ast_rwlock_init(int tracking, const char *filename, int lineno, const char if (t->lock != ((pthread_rwlock_t) __AST_RWLOCK_INIT_VALUE)) { int canlog = tracking && strcmp(filename, "logger.c"); - __ast_mutex_logger("%s line %d (%s): Warning: rwlock '%s' is already initialized.\n", + log_mutex_error(canlog, "%s line %d (%s): Warning: rwlock '%s' is already initialized.\n", filename, lineno, func, rwlock_name); DO_THREAD_CRASH; return EBUSY; @@ -697,7 +708,7 @@ int __ast_rwlock_destroy(const char *filename, int lineno, const char *func, con #if defined(AST_MUTEX_INIT_W_CONSTRUCTORS) && defined(CAN_COMPARE_MUTEX_TO_INIT_VALUE) if (t->lock == ((pthread_rwlock_t) __AST_RWLOCK_INIT_VALUE)) { - __ast_mutex_logger("%s line %d (%s): Warning: rwlock '%s' is uninitialized.\n", + log_mutex_error(canlog, "%s line %d (%s): Warning: rwlock '%s' is uninitialized.\n", filename, lineno, func, rwlock_name); DO_THREAD_CRASH; res = EINVAL; @@ -710,7 +721,7 @@ int __ast_rwlock_destroy(const char *filename, int lineno, const char *func, con #ifdef DEBUG_THREADS if (res) { - __ast_mutex_logger("%s line %d (%s): Error destroying rwlock %s: %s\n", + log_mutex_error(canlog, "%s line %d (%s): Error destroying rwlock %s: %s\n", filename, lineno, func, rwlock_name, strerror(res)); } #if defined(AST_MUTEX_INIT_W_CONSTRUCTORS) && defined(CAN_COMPARE_MUTEX_TO_INIT_VALUE) @@ -746,7 +757,7 @@ int __ast_rwlock_unlock(const char *filename, int line, const char *func, ast_rw #if defined(AST_MUTEX_INIT_W_CONSTRUCTORS) && defined(CAN_COMPARE_MUTEX_TO_INIT_VALUE) if ((t->lock) == ((pthread_rwlock_t) __AST_RWLOCK_INIT_VALUE)) { - __ast_mutex_logger("%s line %d (%s): Warning: rwlock '%s' is uninitialized.\n", + log_mutex_error(canlog, "%s line %d (%s): Warning: rwlock '%s' is uninitialized.\n", filename, line, func, name); DO_THREAD_CRASH; return EINVAL; @@ -781,7 +792,7 @@ int __ast_rwlock_unlock(const char *filename, int line, const char *func, ast_rw } if (lock_found && --lt->reentrancy < 0) { - __ast_mutex_logger("%s line %d (%s): rwlock '%s' freed more times than we've locked!\n", + log_mutex_error(canlog, "%s line %d (%s): rwlock '%s' freed more times than we've locked!\n", filename, line, func, name); lt->reentrancy = 0; } @@ -796,7 +807,7 @@ int __ast_rwlock_unlock(const char *filename, int line, const char *func, ast_rw #ifdef DEBUG_THREADS if (res) { - __ast_mutex_logger("%s line %d (%s): Error releasing rwlock: %s\n", + log_mutex_error(canlog, "%s line %d (%s): Error releasing rwlock: %s\n", filename, line, func, strerror(res)); DO_THREAD_CRASH; } @@ -843,14 +854,14 @@ int __ast_rwlock_rdlock(const char *filename, int line, const char *func, ast_rw if (res == EBUSY) { wait_time = time(NULL) - seconds; if (wait_time > reported_wait && (wait_time % 5) == 0) { - __ast_mutex_logger("%s line %d (%s): Deadlock? waited %d sec for readlock '%s'?\n", + log_mutex_error(canlog, "%s line %d (%s): Deadlock? waited %d sec for readlock '%s'?\n", filename, line, func, (int)wait_time, name); if (lt) { ast_reentrancy_lock(lt); #ifdef HAVE_BKTR __dump_backtrace(<->backtrace[lt->reentrancy], canlog); #endif - __ast_mutex_logger("%s line %d (%s): '%s' was locked here.\n", + log_mutex_error(canlog, "%s line %d (%s): '%s' was locked here.\n", lt->file[lt->reentrancy-1], lt->lineno[lt->reentrancy-1], lt->func[lt->reentrancy-1], name); #ifdef HAVE_BKTR @@ -894,7 +905,7 @@ int __ast_rwlock_rdlock(const char *filename, int line, const char *func, ast_rw } if (res) { - __ast_mutex_logger("%s line %d (%s): Error obtaining read lock: %s\n", + log_mutex_error(canlog, "%s line %d (%s): Error obtaining read lock: %s\n", filename, line, func, strerror(res)); DO_THREAD_CRASH; } @@ -941,14 +952,14 @@ int __ast_rwlock_wrlock(const char *filename, int line, const char *func, ast_rw if (res == EBUSY) { wait_time = time(NULL) - seconds; if (wait_time > reported_wait && (wait_time % 5) == 0) { - __ast_mutex_logger("%s line %d (%s): Deadlock? waited %d sec for writelock '%s'?\n", + log_mutex_error(canlog, "%s line %d (%s): Deadlock? waited %d sec for writelock '%s'?\n", filename, line, func, (int)wait_time, name); if (lt) { ast_reentrancy_lock(lt); #ifdef HAVE_BKTR __dump_backtrace(<->backtrace[lt->reentrancy], canlog); #endif - __ast_mutex_logger("%s line %d (%s): '%s' was locked here.\n", + log_mutex_error(canlog, "%s line %d (%s): '%s' was locked here.\n", lt->file[lt->reentrancy-1], lt->lineno[lt->reentrancy-1], lt->func[lt->reentrancy-1], name); #ifdef HAVE_BKTR @@ -991,7 +1002,7 @@ int __ast_rwlock_wrlock(const char *filename, int line, const char *func, ast_rw ast_remove_lock_info(t, bt); } if (res) { - __ast_mutex_logger("%s line %d (%s): Error obtaining write lock: %s\n", + log_mutex_error(canlog, "%s line %d (%s): Error obtaining write lock: %s\n", filename, line, func, strerror(res)); DO_THREAD_CRASH; } @@ -1073,7 +1084,7 @@ int __ast_rwlock_timedrdlock(const char *filename, int line, const char *func, a ast_remove_lock_info(t, bt); } if (res) { - __ast_mutex_logger("%s line %d (%s): Error obtaining read lock: %s\n", + log_mutex_error(canlog, "%s line %d (%s): Error obtaining read lock: %s\n", filename, line, func, strerror(res)); DO_THREAD_CRASH; } @@ -1155,7 +1166,7 @@ int __ast_rwlock_timedwrlock(const char *filename, int line, const char *func, a ast_remove_lock_info(t, bt); } if (res) { - __ast_mutex_logger("%s line %d (%s): Error obtaining read lock: %s\n", + log_mutex_error(canlog, "%s line %d (%s): Error obtaining read lock: %s\n", filename, line, func, strerror(res)); DO_THREAD_CRASH; } diff --git a/utils/extconf.c b/utils/extconf.c index 2beaef47c9a854e521d0b425fb40c6588b146636..129dcc847822fffa0f72eea985a3cf73539a211f 100644 --- a/utils/extconf.c +++ b/utils/extconf.c @@ -196,7 +196,7 @@ int mtx_prof = -1; #ifdef DEBUG_THREADS -#define __ast_mutex_logger(...) do { if (canlog) ast_log(LOG_ERROR, __VA_ARGS__); else fprintf(stderr, __VA_ARGS__); } while (0) +#define log_mutex_error(canlog, ...) do { if (canlog) ast_log(LOG_ERROR, __VA_ARGS__); else fprintf(stderr, __VA_ARGS__); } while (0) #ifdef THREAD_CRASH #define DO_THREAD_CRASH do { *((int *)(0)) = 1; } while(0) @@ -239,9 +239,9 @@ static inline int __ast_pthread_mutex_init_attr(const char *filename, int lineno 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", + log_mutex_error(canlog, "%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", + log_mutex_error(canlog, "%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; @@ -278,7 +278,7 @@ static inline int __ast_pthread_mutex_destroy(const char *filename, int lineno, #ifdef AST_MUTEX_INIT_W_CONSTRUCTORS if ((t->mutex) == ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) { - __ast_mutex_logger("%s line %d (%s): Error: mutex '%s' is uninitialized.\n", + log_mutex_error(canlog, "%s line %d (%s): Error: mutex '%s' is uninitialized.\n", filename, lineno, func, mutex_name); } #endif @@ -289,19 +289,19 @@ static inline int __ast_pthread_mutex_destroy(const char *filename, int lineno, pthread_mutex_unlock(&t->mutex); break; case EINVAL: - __ast_mutex_logger("%s line %d (%s): Error: attempt to destroy invalid mutex '%s'.\n", + log_mutex_error(canlog, "%s line %d (%s): Error: attempt to destroy invalid mutex '%s'.\n", filename, lineno, func, mutex_name); break; case EBUSY: - __ast_mutex_logger("%s line %d (%s): Error: attempt to destroy locked mutex '%s'.\n", + log_mutex_error(canlog, "%s line %d (%s): Error: attempt to destroy locked mutex '%s'.\n", filename, lineno, func, mutex_name); - __ast_mutex_logger("%s line %d (%s): Error: '%s' was locked here.\n", + log_mutex_error(canlog, "%s line %d (%s): Error: '%s' was locked here.\n", t->file[t->reentrancy-1], t->lineno[t->reentrancy-1], t->func[t->reentrancy-1], mutex_name); break; } if ((res = pthread_mutex_destroy(&t->mutex))) - __ast_mutex_logger("%s line %d (%s): Error destroying mutex: %s\n", + log_mutex_error(canlog, "%s line %d (%s): Error destroying mutex: %s\n", filename, lineno, func, strerror(res)); #ifndef PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP else @@ -322,7 +322,7 @@ static inline int __ast_pthread_mutex_lock(const char *filename, int lineno, con #if defined(AST_MUTEX_INIT_W_CONSTRUCTORS) if ((t->mutex) == ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) { - __ast_mutex_logger("%s line %d (%s): Error: mutex '%s' is uninitialized.\n", + log_mutex_error(canlog, "%s line %d (%s): Error: mutex '%s' is uninitialized.\n", filename, lineno, func, mutex_name); ast_mutex_init(t); } @@ -343,9 +343,9 @@ static inline int __ast_pthread_mutex_lock(const char *filename, int lineno, con if (res == EBUSY) { current = time(NULL); if ((current - seconds) && (!((current - seconds) % 5))) { - __ast_mutex_logger("%s line %d (%s): Deadlock? waited %d sec for mutex '%s'?\n", + log_mutex_error(canlog, "%s line %d (%s): Deadlock? waited %d sec for mutex '%s'?\n", filename, lineno, func, (int)(current - seconds), mutex_name); - __ast_mutex_logger("%s line %d (%s): '%s' was locked here.\n", + log_mutex_error(canlog, "%s line %d (%s): '%s' was locked here.\n", t->file[t->reentrancy-1], t->lineno[t->reentrancy-1], t->func[t->reentrancy-1], mutex_name); } @@ -371,11 +371,11 @@ static inline int __ast_pthread_mutex_lock(const char *filename, int lineno, con t->thread[t->reentrancy] = pthread_self(); t->reentrancy++; } else { - __ast_mutex_logger("%s line %d (%s): '%s' really deep reentrancy!\n", + log_mutex_error(canlog, "%s line %d (%s): '%s' really deep reentrancy!\n", filename, lineno, func, mutex_name); } } else { - __ast_mutex_logger("%s line %d (%s): Error obtaining mutex: %s\n", + log_mutex_error(canlog, "%s line %d (%s): Error obtaining mutex: %s\n", filename, lineno, func, strerror(errno)); DO_THREAD_CRASH; } @@ -391,7 +391,7 @@ static inline int __ast_pthread_mutex_trylock(const char *filename, int lineno, #if defined(AST_MUTEX_INIT_W_CONSTRUCTORS) if ((t->mutex) == ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) { - __ast_mutex_logger("%s line %d (%s): Error: mutex '%s' is uninitialized.\n", + log_mutex_error(canlog, "%s line %d (%s): Error: mutex '%s' is uninitialized.\n", filename, lineno, func, mutex_name); ast_mutex_init(t); } @@ -405,11 +405,11 @@ static inline int __ast_pthread_mutex_trylock(const char *filename, int lineno, t->thread[t->reentrancy] = pthread_self(); t->reentrancy++; } else { - __ast_mutex_logger("%s line %d (%s): '%s' really deep reentrancy!\n", + log_mutex_error(canlog, "%s line %d (%s): '%s' really deep reentrancy!\n", filename, lineno, func, mutex_name); } } else { - __ast_mutex_logger("%s line %d (%s): Warning: '%s' was locked here.\n", + log_mutex_error(canlog, "%s line %d (%s): Warning: '%s' was locked here.\n", t->file[t->reentrancy-1], t->lineno[t->reentrancy-1], t->func[t->reentrancy-1], mutex_name); } @@ -424,21 +424,21 @@ static inline int __ast_pthread_mutex_unlock(const char *filename, int lineno, c #ifdef AST_MUTEX_INIT_W_CONSTRUCTORS if ((t->mutex) == ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) { - __ast_mutex_logger("%s line %d (%s): Error: mutex '%s' is uninitialized.\n", + log_mutex_error(canlog, "%s line %d (%s): Error: mutex '%s' is uninitialized.\n", filename, lineno, func, mutex_name); } #endif if (t->reentrancy && (t->thread[t->reentrancy-1] != pthread_self())) { - __ast_mutex_logger("%s line %d (%s): attempted unlock mutex '%s' without owning it!\n", + log_mutex_error(canlog, "%s line %d (%s): attempted unlock mutex '%s' without owning it!\n", filename, lineno, func, mutex_name); - __ast_mutex_logger("%s line %d (%s): '%s' was locked here.\n", + log_mutex_error(canlog, "%s line %d (%s): '%s' was locked here.\n", t->file[t->reentrancy-1], t->lineno[t->reentrancy-1], t->func[t->reentrancy-1], mutex_name); DO_THREAD_CRASH; } if (--t->reentrancy < 0) { - __ast_mutex_logger("%s line %d (%s): mutex '%s' freed more times than we've locked!\n", + log_mutex_error(canlog, "%s line %d (%s): mutex '%s' freed more times than we've locked!\n", filename, lineno, func, mutex_name); t->reentrancy = 0; } @@ -451,7 +451,7 @@ static inline int __ast_pthread_mutex_unlock(const char *filename, int lineno, c } if ((res = pthread_mutex_unlock(&t->mutex))) { - __ast_mutex_logger("%s line %d (%s): Error releasing mutex: %s\n", + log_mutex_error(canlog, "%s line %d (%s): Error releasing mutex: %s\n", filename, lineno, func, strerror(res)); DO_THREAD_CRASH; }