[asterisk-commits] rmudgett: branch 12 r413454 - /branches/12/apps/app_confbridge.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed May 7 15:58:09 CDT 2014
Author: rmudgett
Date: Wed May 7 15:58:03 2014
New Revision: 413454
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=413454
Log:
app_confbridge: Fixed "CBAnn" channels not going away.
Fixed a ref leak in conf_handle_talker_cb() everytime the conference
bridge was found to report a channel's talker status change. The
resulting leak caused the "CBAnn" channels and the conference bridge to
never be destroyed.
Thanks to Richard Kenner on the asterisk-user's list for locating the
problem.
Reported by: Richard Kenner
Modified:
branches/12/apps/app_confbridge.c
Modified: branches/12/apps/app_confbridge.c
URL: http://svnview.digium.com/svn/asterisk/branches/12/apps/app_confbridge.c?view=diff&rev=413454&r1=413453&r2=413454
==============================================================================
--- branches/12/apps/app_confbridge.c (original)
+++ branches/12/apps/app_confbridge.c Wed May 7 15:58:03 2014
@@ -433,7 +433,6 @@
json_object = ast_json_pack("{s: s}",
"conference", conference->name);
-
if (!json_object) {
return;
}
@@ -448,7 +447,6 @@
chan,
json_object);
ast_bridge_unlock(conference->bridge);
-
if (!msg) {
return;
}
@@ -458,7 +456,6 @@
} else {
stasis_publish(ast_bridge_topic(conference->bridge), msg);
}
-
}
static void send_conf_start_event(struct confbridge_conference *conference)
@@ -1448,9 +1445,10 @@
static int conf_handle_talker_cb(struct ast_bridge_channel *bridge_channel, void *hook_pvt, int talking)
{
const char *conf_name = hook_pvt;
- struct confbridge_conference *conference = ao2_find(conference_bridges, conf_name, OBJ_KEY);
+ RAII_VAR(struct confbridge_conference *, conference, NULL, ao2_cleanup);
struct ast_json *talking_extras;
+ conference = ao2_find(conference_bridges, conf_name, OBJ_KEY);
if (!conference) {
/* Remove the hook since the conference does not exist. */
return -1;
@@ -2139,6 +2137,7 @@
struct confbridge_user *user = NULL;
SCOPED_AO2LOCK(bridge_lock, conference);
+
AST_LIST_TRAVERSE(&conference->active_list, user, list) {
if (!strcasecmp(ast_channel_name(user->chan), channel) && !user->kicked) {
user->kicked = 1;
More information about the asterisk-commits
mailing list