[asterisk-commits] kmoore: trunk r411806 - in /trunk: ./ res/res_stasis.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon Apr 7 09:29:41 CDT 2014


Author: kmoore
Date: Mon Apr  7 09:29:37 2014
New Revision: 411806

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=411806
Log:
Stasis: Fix Stasis() bridge refcount issue

The Stasis() dialplan application monitors what bridge a channel is in
and so necessarily holds on to a bridge pointer. This change ensures
that it also holds on to a reference for that bridge to prevent the
bridge pointer from becoming a dangling pointer.
........

Merged revisions 411804 from http://svn.asterisk.org/svn/asterisk/branches/12

Modified:
    trunk/   (props changed)
    trunk/res/res_stasis.c

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

Modified: trunk/res/res_stasis.c
URL: http://svnview.digium.com/svn/asterisk/trunk/res/res_stasis.c?view=diff&rev=411806&r1=411805&r2=411806
==============================================================================
--- trunk/res/res_stasis.c (original)
+++ trunk/res/res_stasis.c Mon Apr  7 09:29:37 2014
@@ -777,7 +777,7 @@
 		RAII_VAR(struct ast_frame *, f, NULL, ast_frame_dtor);
 		int r;
 		int command_count;
-		struct ast_bridge *last_bridge;
+		RAII_VAR(struct ast_bridge *, last_bridge, NULL, ao2_cleanup);
 
 		/* Check to see if a bridge absorbed our hangup frame */
 		if (ast_check_hangup_locked(chan)) {
@@ -785,7 +785,7 @@
 		}
 
 		last_bridge = bridge;
-		bridge = stasis_app_get_bridge(control);
+		bridge = ao2_bump(stasis_app_get_bridge(control));
 
 		if (bridge != last_bridge) {
 			app_unsubscribe_bridge(app, last_bridge);
@@ -839,6 +839,7 @@
 
 	app_unsubscribe_bridge(app, stasis_app_get_bridge(control));
 	app_unsubscribe_channel(app, chan);
+	ao2_cleanup(bridge);
 
 	res = send_end_msg(app, chan);
 	if (res != 0) {




More information about the asterisk-commits mailing list