[Asterisk-code-review] Unset BRIDGEPEER when leaving a bridge (asterisk[13])
Joshua Colp
asteriskteam at digium.com
Wed Dec 2 14:07:08 CST 2015
Joshua Colp has submitted this change and it was merged.
Change subject: Unset BRIDGEPEER when leaving a bridge
......................................................................
Unset BRIDGEPEER when leaving a bridge
Currently if a channel is transferred out of a bridge, the BRIDGEPEER
variable (also BRIDGEPVTCALLID) remain set even once the channel is
out of the bridge. This patch removes these variables when leaving
the bridge.
ASTERISK-25600 #close
Reported by: Mark Michelson
Change-Id: I753ead2fffbfc65427ed4e9244c7066610e546da
---
M include/asterisk/bridge.h
M main/bridge.c
M main/bridge_channel.c
3 files changed, 21 insertions(+), 5 deletions(-)
Approvals:
Richard Mudgett: Looks good to me, but someone else must approve
Anonymous Coward #1000019: Verified
Joshua Colp: Looks good to me, approved
diff --git a/include/asterisk/bridge.h b/include/asterisk/bridge.h
index fc37262..30ac095 100644
--- a/include/asterisk/bridge.h
+++ b/include/asterisk/bridge.h
@@ -746,6 +746,18 @@
*/
int ast_bridge_unsuspend(struct ast_bridge *bridge, struct ast_channel *chan);
+/*!
+ * \brief Sets BRIDGECHANNEL and BRIDGEPVTCALLID for a channel
+ *
+ * \pre chan must be locked before calling
+ *
+ * \param name channel name of the bridged peer
+ * \param pvtid Private CallID of the bridged peer
+ *
+ * \return nothing
+ */
+void ast_bridge_vars_set(struct ast_channel *chan, const char *name, const char *pvtid);
+
struct ast_unreal_pvt;
/*!
diff --git a/main/bridge.c b/main/bridge.c
index 7644884..b5c5951 100644
--- a/main/bridge.c
+++ b/main/bridge.c
@@ -1213,7 +1213,7 @@
}
}
-static void update_bridge_vars_set(struct ast_channel *chan, const char *name, const char *pvtid)
+void ast_bridge_vars_set(struct ast_channel *chan, const char *name, const char *pvtid)
{
ast_channel_stage_snapshot(chan);
pbx_builtin_setvar_helper(chan, "BRIDGEPEER", name);
@@ -1253,12 +1253,12 @@
ast_channel_unlock(c1);
ast_channel_lock(c0);
- update_bridge_vars_set(c0, c1_name, c1_pvtid);
+ ast_bridge_vars_set(c0, c1_name, c1_pvtid);
UPDATE_BRIDGE_VARS_GET(c0, c0_name, c0_pvtid);
ast_channel_unlock(c0);
ast_channel_lock(c1);
- update_bridge_vars_set(c1, c0_name, c0_pvtid);
+ ast_bridge_vars_set(c1, c0_name, c0_pvtid);
ast_channel_unlock(c1);
}
@@ -1359,7 +1359,7 @@
++idx;
ast_channel_lock(bridge_channel->chan);
- update_bridge_vars_set(bridge_channel->chan, buf, NULL);
+ ast_bridge_vars_set(bridge_channel->chan, buf, NULL);
ast_channel_unlock(bridge_channel->chan);
}
}
@@ -1381,7 +1381,7 @@
AST_LIST_TRAVERSE(&bridge->channels, bridge_channel, entry) {
ast_channel_lock(bridge_channel->chan);
- update_bridge_vars_set(bridge_channel->chan, NULL, NULL);
+ ast_bridge_vars_set(bridge_channel->chan, NULL, NULL);
ast_channel_unlock(bridge_channel->chan);
}
}
diff --git a/main/bridge_channel.c b/main/bridge_channel.c
index 8ce0220..3874e50 100644
--- a/main/bridge_channel.c
+++ b/main/bridge_channel.c
@@ -289,6 +289,10 @@
channel_set_cause(bridge_channel->chan, cause);
+ ast_channel_lock(bridge_channel->chan);
+ ast_bridge_vars_set(bridge_channel->chan, NULL, NULL);
+ ast_channel_unlock(bridge_channel->chan);
+
/* Change the state on the bridge channel */
bridge_channel->state = new_state;
--
To view, visit https://gerrit.asterisk.org/1752
To unsubscribe, visit https://gerrit.asterisk.org/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I753ead2fffbfc65427ed4e9244c7066610e546da
Gerrit-PatchSet: 1
Gerrit-Project: asterisk
Gerrit-Branch: 13
Gerrit-Owner: Jonathan Rose <jrose at digium.com>
Gerrit-Reviewer: Anonymous Coward #1000019
Gerrit-Reviewer: Joshua Colp <jcolp at digium.com>
Gerrit-Reviewer: Richard Mudgett <rmudgett at digium.com>
More information about the asterisk-code-review
mailing list