From: Jonathan Rose Date: Fri, 15 Aug 2014 16:56:33 +0000 (+0000) Subject: Bridging: Fix a behavioral change when checking if a channel is leaving a bridge X-Git-Tag: 12.6.0-rc1~79 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8910ea736d7da2386df5b47abebce38f669ee41f;p=thirdparty%2Fasterisk.git Bridging: Fix a behavioral change when checking if a channel is leaving a bridge r420934 introduced some failures in the test suite. Upon investigating, it was discovered that differences in the way we were evaluating whether a channel was in the process of leaving a bridge were causing some reinvites not to occur (mostly reinvites back to Asterisk when ending a call). This patch fixes that behavioral change. ASTERISK-24027 #close Reported by: Matt Jordan Review: https://reviewboard.asterisk.org/r/3910/ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/12@421186 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/main/channel.c b/main/channel.c index bd213cdb93..c17e28c7a5 100644 --- a/main/channel.c +++ b/main/channel.c @@ -10183,12 +10183,14 @@ int ast_channel_is_leaving_bridge(struct ast_channel *chan) { int hangup_flags = ast_channel_softhangup_internal_flag(chan); int hangup_test = hangup_flags & AST_SOFTHANGUP_ASYNCGOTO; + int unbridge = ast_channel_unbridged(chan); - /* This function should only return true if only the ASYNCGOTO - * is set. It should false if any other flag is set or if the - * ASYNCGOTO flag is not set. + /* This function should only return true if either the unbridged flag or + * the ASYNCGOTO soft hangup flag is set and when no other soft hangup + * flags are set. Any other soft hangup flags being set should make it + * return false. */ - return (hangup_test && (hangup_test == hangup_flags)); + return ((hangup_test || unbridge) && (hangup_test == hangup_flags)); } struct ast_channel *ast_channel_bridge_peer(struct ast_channel *chan)