]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
bridge: Kick channel from bridge if hung up during action. 35/1135/1
authorJoshua Colp <jcolp@digium.com>
Mon, 24 Aug 2015 11:21:37 +0000 (08:21 -0300)
committerJoshua Colp <jcolp@digium.com>
Mon, 24 Aug 2015 16:12:32 +0000 (11:12 -0500)
When executing an action in a bridge it is possible for the
channel to be hung up without the bridge becoming aware of it.
This is most easily reproducible by hanging up when the bridge
is streaming DTMF due to a feature timeout. This change makes
it so after action execution the channel is checked to determine
if it has been hung up and if it has it is kicked from the bridge.

ASTERISK-25341 #close

Change-Id: I6dd8b0c3f5888da1c57afed9e8a802ae0a053062

main/bridge_channel.c

index 914e9a4bfe42a489b03c8db08192f630491d921f..8ccdbc1a4da2c302a377b88ec0347925bea06a7d 100644 (file)
@@ -1873,6 +1873,13 @@ static void bridge_channel_handle_action(struct ast_bridge_channel *bridge_chann
        default:
                break;
        }
+
+       /* While invoking an action it is possible for the channel to be hung up. So
+        * that the bridge respects this we check here and if hung up kick it out.
+        */
+       if (bridge_channel->chan && ast_check_hangup_locked(bridge_channel->chan)) {
+               ast_bridge_channel_kick(bridge_channel, 0);
+       }
 }
 
 /*!