[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