[asterisk-commits] rmudgett: trunk r411702 - in /trunk: ./ main/ res/

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Apr 4 12:57:50 CDT 2014


Author: rmudgett
Date: Fri Apr  4 12:57:46 2014
New Revision: 411702

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=411702
Log:
locking: Add temporary sanity checks.

Add some temporary sanity checks to hunt for locking problems with the
masquerade supertest.

Modified:
    trunk/   (props changed)
    trunk/main/channel.c
    trunk/main/stasis_cache.c
    trunk/main/utils.c
    trunk/res/res_musiconhold.c

Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-12-merged' - no diff available.

Modified: trunk/main/channel.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/channel.c?view=diff&rev=411702&r1=411701&r2=411702
==============================================================================
--- trunk/main/channel.c (original)
+++ trunk/main/channel.c Fri Apr  4 12:57:46 2014
@@ -884,9 +884,8 @@
 	ast_channel_stage_snapshot(tmp);
 
 	if (!(nativeformats = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_CACHE_STRINGS))) {
-		ao2_ref(tmp, -1);
 		/* format capabilities structure allocation failure */
-		return NULL;
+		return ast_channel_unref(tmp);
 	}
 	ast_channel_nativeformats_set(tmp, nativeformats);
 
@@ -2263,10 +2262,16 @@
 
 	/* Things that may possibly raise Stasis messages shouldn't occur after this point */
 	ast_set_flag(ast_channel_flags(chan), AST_FLAG_DEAD);
-	ast_channel_lock(chan);
-	ast_channel_publish_snapshot(chan);
-	ast_channel_unlock(chan);
-	publish_cache_clear(chan);
+
+	if (ast_channel_internal_is_finalized(chan)) {
+		/* A channel snapshot should not be in the process of being staged now. */
+		ast_assert(!ast_test_flag(ast_channel_flags(chan), AST_FLAG_SNAPSHOT_STAGE));
+
+		ast_channel_lock(chan);
+		ast_channel_publish_snapshot(chan);
+		ast_channel_unlock(chan);
+		publish_cache_clear(chan);
+	}
 
 	ast_channel_lock(chan);
 

Modified: trunk/main/stasis_cache.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/stasis_cache.c?view=diff&rev=411702&r1=411701&r2=411702
==============================================================================
--- trunk/main/stasis_cache.c (original)
+++ trunk/main/stasis_cache.c Fri Apr  4 12:57:46 2014
@@ -343,10 +343,17 @@
 static struct stasis_cache_entry *cache_find(struct ao2_container *entries, struct stasis_message_type *type, const char *id)
 {
 	struct cache_entry_key search_key;
+	struct stasis_cache_entry *entry;
 
 	search_key.type = type;
 	search_key.id = id;
-	return ao2_find(entries, &search_key, OBJ_SEARCH_KEY | OBJ_NOLOCK);
+	entry = ao2_find(entries, &search_key, OBJ_SEARCH_KEY | OBJ_NOLOCK);
+
+	/* Ensure that what we looked for is what we found. */
+	ast_assert(!entry
+		|| (!strcmp(stasis_message_type_name(entry->key.type),
+			stasis_message_type_name(type)) && !strcmp(entry->key.id, id)));
+	return entry;
 }
 
 /*!

Modified: trunk/main/utils.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/utils.c?view=diff&rev=411702&r1=411701&r2=411702
==============================================================================
--- trunk/main/utils.c (original)
+++ trunk/main/utils.c Fri Apr  4 12:57:46 2014
@@ -52,6 +52,7 @@
 #include "asterisk/sha1.h"
 #include "asterisk/cli.h"
 #include "asterisk/linkedlists.h"
+#include "asterisk/astobj2.h"
 
 #define AST_API_MODULE		/* ensure that inlinable API functions will be built in this module if required */
 #include "asterisk/strings.h"
@@ -2523,6 +2524,10 @@
 		condition_str, condition);
 	fprintf(stderr, "FRACK!, Failed assertion %s (%d) at line %d in %s of %s\n",
 		condition_str, condition, line, function, file);
+
+	/* Generate a backtrace for the assert */
+	ao2_bt();
+
 	/*
 	 * Give the logger a chance to get the message out, just in case
 	 * we abort(), or Asterisk crashes due to whatever problem just

Modified: trunk/res/res_musiconhold.c
URL: http://svnview.digium.com/svn/asterisk/trunk/res/res_musiconhold.c?view=diff&rev=411702&r1=411701&r2=411702
==============================================================================
--- trunk/res/res_musiconhold.c (original)
+++ trunk/res/res_musiconhold.c Fri Apr  4 12:57:46 2014
@@ -280,6 +280,9 @@
 	message = ast_channel_blob_create_from_cache(ast_channel_uniqueid(chan),
 		ast_channel_moh_start_type(), json_object);
 	if (message) {
+		/* A channel snapshot must have been in the cache. */
+		ast_assert(((struct ast_channel_blob *) stasis_message_data(message))->snapshot != NULL);
+
 		stasis_publish(ast_channel_topic(chan), message);
 	}
 	ao2_cleanup(message);
@@ -295,6 +298,9 @@
 	message = ast_channel_blob_create_from_cache(ast_channel_uniqueid(chan),
 		ast_channel_moh_stop_type(), NULL);
 	if (message) {
+		/* A channel snapshot must have been in the cache. */
+		ast_assert(((struct ast_channel_blob *) stasis_message_data(message))->snapshot != NULL);
+
 		stasis_publish(ast_channel_topic(chan), message);
 	}
 	ao2_cleanup(message);




More information about the asterisk-commits mailing list