summaryrefslogtreecommitdiff
path: root/include/asterisk/lock.h
diff options
context:
space:
mode:
authorKevin P. Fleming <kpfleming@digium.com>2006-05-23 17:04:07 +0000
committerKevin P. Fleming <kpfleming@digium.com>2006-05-23 17:04:07 +0000
commit8d74f0ebe67ba3eee5ad264594ce3af8ef971d84 (patch)
treeb13f49a12298d5f30c7901dd68d03dfabca06529 /include/asterisk/lock.h
parent5d51260c36d4cb941c1c7ca4931ab254e9c66f9f (diff)
restore AST_LIST_HEAD_INIT (with no users in the tree right now)
update ast_mutex_init to allow mutexes that are all zero bytes to be initialized (in the case of a dynamically-allocated structure containing a mutex) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@29727 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'include/asterisk/lock.h')
-rw-r--r--include/asterisk/lock.h21
1 files changed, 15 insertions, 6 deletions
diff --git a/include/asterisk/lock.h b/include/asterisk/lock.h
index 1ac5f4ba7..904a7e64e 100644
--- a/include/asterisk/lock.h
+++ b/include/asterisk/lock.h
@@ -149,6 +149,13 @@ typedef struct ast_mutex_info ast_mutex_t;
typedef pthread_cond_t ast_cond_t;
+static pthread_mutex_t empty_mutex;
+
+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,
const char *mutex_name, ast_mutex_t *t,
pthread_mutexattr_t *attr)
@@ -157,14 +164,16 @@ static inline int __ast_pthread_mutex_init_attr(const char *filename, int lineno
int canlog = strcmp(filename, "logger.c");
if ((t->mutex) != ((pthread_mutex_t) PTHREAD_MUTEX_INITIALIZER)) {
- __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",
- t->file[0], t->lineno[0], t->func[0], mutex_name);
+ 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",
+ t->file[0], t->lineno[0], t->func[0], mutex_name);
#ifdef THREAD_CRASH
- DO_THREAD_CRASH;
+ DO_THREAD_CRASH;
#endif
- return 0;
+ return 0;
+ }
}
#endif