[asterisk-commits] sgriepentrog: trunk r418963 - in /trunk: include/asterisk/ main/ res/

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Jul 18 12:55:42 CDT 2014


Author: sgriepentrog
Date: Fri Jul 18 12:55:38 2014
New Revision: 418963

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=418963
Log:
astobj2: assert on invalid ref and backtrace cleanup

If a reference count goes negative, instead of
just logging that fact, be more helpful with a
backtrace and an assert that will DO_CRASH.

This patch also removes the duplicate ao2_bt()
function and cleans up extraneous usage of the
ast_log_backtrace() call.

Review: https://reviewboard.asterisk.org/r/3765/


Modified:
    trunk/include/asterisk/astobj2.h
    trunk/main/astobj2.c
    trunk/main/logger.c
    trunk/main/utils.c
    trunk/res/res_pjsip_pubsub.c

Modified: trunk/include/asterisk/astobj2.h
URL: http://svnview.digium.com/svn/asterisk/trunk/include/asterisk/astobj2.h?view=diff&rev=418963&r1=418962&r2=418963
==============================================================================
--- trunk/include/asterisk/astobj2.h (original)
+++ trunk/include/asterisk/astobj2.h Fri Jul 18 12:55:38 2014
@@ -1961,9 +1961,6 @@
  */
 void ao2_iterator_restart(struct ao2_iterator *iter);
 
-/* extra functions */
-void ao2_bt(void);	/* backtrace */
-
 /*! gcc __attribute__(cleanup()) functions
  * \note they must be able to handle NULL parameters because most of the
  * allocation/find functions can fail and we don't want to try to tear

Modified: trunk/main/astobj2.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/astobj2.c?view=diff&rev=418963&r1=418962&r2=418963
==============================================================================
--- trunk/main/astobj2.c (original)
+++ trunk/main/astobj2.c Fri Jul 18 12:55:38 2014
@@ -97,29 +97,6 @@
 struct ao2_stats ao2;
 #endif
 
-#ifdef HAVE_BKTR
-#include <execinfo.h>    /* for backtrace */
-#endif
-
-void ao2_bt(void)
-{
-#ifdef HAVE_BKTR
-	int depth;
-	int idx;
-#define N1	20
-	void *addresses[N1];
-	char **strings;
-
-	depth = backtrace(addresses, N1);
-	strings = ast_bt_get_symbols(addresses, depth);
-	ast_verbose("backtrace returned: %d\n", depth);
-	for (idx = 0; idx < depth; ++idx) {
-		ast_verbose("%d: %p %s\n", idx, addresses[idx], strings[idx]);
-	}
-	ast_std_free(strings);
-#endif
-}
-
 #define INTERNAL_OBJ_MUTEX(user_data) \
 	((struct astobj2_lock *) (((char *) (user_data)) - sizeof(struct astobj2_lock)))
 
@@ -455,6 +432,9 @@
 	if (current_value < 0) {
 		ast_log(__LOG_ERROR, file, line, func,
 			"Invalid refcount %d on ao2 object %p\n", current_value, user_data);
+		ast_assert(0);
+		/* stop here even if assert doesn't DO_CRASH */
+		return -1;
 	}
 
 	/* last reference, destroy the object */
@@ -516,7 +496,6 @@
 	}
 
 	if (obj == NULL) {
-		ast_log_backtrace();
 		ast_assert(0);
 	}
 

Modified: trunk/main/logger.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/logger.c?view=diff&rev=418963&r1=418962&r2=418963
==============================================================================
--- trunk/main/logger.c (original)
+++ trunk/main/logger.c Fri Jul 18 12:55:38 2014
@@ -1759,14 +1759,14 @@
 	}
 
 	if ((strings = ast_bt_get_symbols(bt->addresses, bt->num_frames))) {
-		ast_debug(1, "Got %d backtrace record%c\n", bt->num_frames, bt->num_frames != 1 ? 's' : ' ');
+		ast_verbose("Got %d backtrace record%c\n", bt->num_frames, bt->num_frames != 1 ? 's' : ' ');
 		for (i = 3; i < bt->num_frames - 2; i++) {
-			ast_debug(1, "#%d: [%p] %s\n", i - 3, bt->addresses[i], strings[i]);
+			ast_verbose("#%d: [%p] %s\n", i - 3, bt->addresses[i], strings[i]);
 		}
 
 		ast_std_free(strings);
 	} else {
-		ast_debug(1, "Could not allocate memory for backtrace\n");
+		ast_verbose("Could not allocate memory for backtrace\n");
 	}
 	ast_bt_destroy(bt);
 #else

Modified: trunk/main/utils.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/utils.c?view=diff&rev=418963&r1=418962&r2=418963
==============================================================================
--- trunk/main/utils.c (original)
+++ trunk/main/utils.c Fri Jul 18 12:55:38 2014
@@ -2544,7 +2544,7 @@
 		condition_str, condition, line, function, file);
 
 	/* Generate a backtrace for the assert */
-	ao2_bt();
+	ast_log_backtrace();
 
 	/*
 	 * Give the logger a chance to get the message out, just in case

Modified: trunk/res/res_pjsip_pubsub.c
URL: http://svnview.digium.com/svn/asterisk/trunk/res/res_pjsip_pubsub.c?view=diff&rev=418963&r1=418962&r2=418963
==============================================================================
--- trunk/res/res_pjsip_pubsub.c (original)
+++ trunk/res/res_pjsip_pubsub.c Fri Jul 18 12:55:38 2014
@@ -992,8 +992,6 @@
 			PJSIP_EVSUB_STATE_ACTIVE : PJSIP_EVSUB_STATE_TERMINATED;
 	}
 
-	ast_log_backtrace();
-
 	if (pjsip_evsub_notify(evsub, state, NULL, NULL, &tdata) != PJ_SUCCESS) {
 		ast_free(body_text);
 		return -1;




More information about the asterisk-commits mailing list