summaryrefslogtreecommitdiff
path: root/main/channel.c
diff options
context:
space:
mode:
authorMark Michelson <mmichelson@digium.com>2015-09-24 14:49:46 -0500
committerMark Michelson <mmichelson@digium.com>2015-09-24 15:00:27 -0500
commitf42084be096d3f5a5606fb1c64d660ec2aa72426 (patch)
treea28ba858fa473f6fe52c7aad2a321fc87fed34b3 /main/channel.c
parent17dd4a476ccb77111797913a40a59eec274c188c (diff)
Do not swallow frames on channels leaving bridges.
When leaving a bridge, indications on a channel could be swallowed by the internal indication logic because it appears that the channel is on its way to be hung up anyway. One such situation where this is detrimental is when channels on hold are redirected out of a bridge. The AST_CONTROL_UNHOLD indication from the bridging code is swallowed, leaving the channel in question to still appear to be on hold. The fix here is to modify the logic inside ast_indicate_data() to not drop the indication if the channel is simply leaving a bridge. This way, channels on hold redirected out of a bridge revert to their expected "in use" state after the redirection. ASTERISK-25418 #close Reported by Mark Michelson Change-Id: If6115204dfa0551c050974ee138fabd15f978949
Diffstat (limited to 'main/channel.c')
-rw-r--r--main/channel.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/main/channel.c b/main/channel.c
index 25badf38d..3e2636f5a 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -4487,7 +4487,7 @@ int ast_indicate_data(struct ast_channel *chan, int _condition,
/* Don't bother if the channel is about to go away, anyway. */
if ((ast_test_flag(ast_channel_flags(chan), AST_FLAG_ZOMBIE)
- || ast_check_hangup(chan))
+ || (ast_check_hangup(chan) && !ast_channel_is_leaving_bridge(chan)))
&& condition != AST_CONTROL_MASQUERADE_NOTIFY) {
res = -1;
goto indicate_cleanup;