summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2016-04-15 11:41:49 -0500
committerRichard Mudgett <rmudgett@digium.com>2016-04-18 10:51:56 -0500
commitf4693d1897614faf5631051f9f6616bf99b940b3 (patch)
tree2b19170a98dd20e4bf820c02172f4d25774bdb65
parent22335fe18af85b8086899740cef436b5a59a2ae4 (diff)
bridge_channel.c: Ignore role setup failure in channel push.
We have to setup the channel roles after the bridge class push is called because the bridge class push callback may have set roles on the incoming channel. Since we have already partially pushed the channel into the bridge and reversing what we have already done could be problematic, the only thing we can do is press on to complete pushing the channel into the bridge. * Ignore any channel role setup errors after pushing the channel into a bridge. The channel may behave incorrectly in the bridge but we can no longer abort the push at this time. Change-Id: I08a97082b729052ee65cdca6bb730cf1289ede00
-rw-r--r--main/bridge_channel.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/main/bridge_channel.c b/main/bridge_channel.c
index c9262a84a..e45ad1759 100644
--- a/main/bridge_channel.c
+++ b/main/bridge_channel.c
@@ -2117,13 +2117,14 @@ int bridge_channel_internal_push_full(struct ast_bridge_channel *bridge_channel,
if (bridge->dissolved
|| bridge_channel->state != BRIDGE_CHANNEL_STATE_WAIT
|| (swap && swap->state != BRIDGE_CHANNEL_STATE_WAIT)
- || bridge->v_table->push(bridge, bridge_channel, swap)
- || ast_bridge_channel_establish_roles(bridge_channel)) {
+ || bridge->v_table->push(bridge, bridge_channel, swap)) {
ast_debug(1, "Bridge %s: pushing %p(%s) into bridge failed\n",
bridge->uniqueid, bridge_channel, ast_channel_name(bridge_channel->chan));
return -1;
}
+ ast_bridge_channel_establish_roles(bridge_channel);
+
if (swap) {
int dissolve = ast_test_flag(&bridge->feature_flags, AST_BRIDGE_FLAG_DISSOLVE_EMPTY);