summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2014-05-07 20:59:13 +0000
committerRichard Mudgett <rmudgett@digium.com>2014-05-07 20:59:13 +0000
commita92f0a9e83b6301ec2cbe754cf4fcfadf9079011 (patch)
tree25272e5974199c6fcad663a3ec17c674ac875192 /apps
parent90b9413a0d0381b9227116939d4c38450222b501 (diff)
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 ........ Merged revisions 413454 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@413455 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'apps')
-rw-r--r--apps/app_confbridge.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/apps/app_confbridge.c b/apps/app_confbridge.c
index 07069edf0..48573d54c 100644
--- a/apps/app_confbridge.c
+++ b/apps/app_confbridge.c
@@ -447,7 +447,6 @@ static void send_conf_stasis(struct confbridge_conference *conference, struct as
json_object = ast_json_pack("{s: s}",
"conference", conference->name);
-
if (!json_object) {
return;
}
@@ -462,7 +461,6 @@ static void send_conf_stasis(struct confbridge_conference *conference, struct as
chan,
json_object);
ast_bridge_unlock(conference->bridge);
-
if (!msg) {
return;
}
@@ -472,7 +470,6 @@ static void send_conf_stasis(struct confbridge_conference *conference, struct as
} else {
stasis_publish(ast_bridge_topic(conference->bridge), msg);
}
-
}
static void send_conf_start_event(struct confbridge_conference *conference)
@@ -1462,9 +1459,10 @@ static void conf_handle_talker_destructor(void *pvt_data)
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;
@@ -2191,6 +2189,7 @@ static int kick_conference_participant(struct confbridge_conference *conference,
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;