diff --git a/include/asterisk/linkedlists.h b/include/asterisk/linkedlists.h
index a54f88368185303d8d011d4552b7129d762e3a6b..b3b3dbf98b145e75e95ba65af5fd9db58acb6ce7 100644
--- a/include/asterisk/linkedlists.h
+++ b/include/asterisk/linkedlists.h
@@ -359,6 +359,19 @@ struct {								\
  */
 #define AST_LIST_TRAVERSE_SAFE_END  }
 
+/*!
+  \brief Initializes a list head structure.
+  \param head This is a pointer to the list head structure
+
+  This macro initializes a list head structure by setting the head
+  entry to \a NULL (empty list) and recreating the embedded lock.
+*/
+#define AST_LIST_HEAD_INIT(head) {					\
+	(head)->first = NULL;						\
+	(head)->last = NULL;						\
+	ast_mutex_init(&(head)->lock);					\
+}
+
 /*!
   \brief Destroys a list head structure.
   \param head This is a pointer to the list head structure
diff --git a/include/asterisk/lock.h b/include/asterisk/lock.h
index 1ac5f4ba78071edd8cb39a91aaaaa1a75a46029b..904a7e64ec3183cb91ef539c0bd119ad488b7d86 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