mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-29 18:19:30 +00:00
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/ ........ Merged revisions 421186 from http://svn.asterisk.org/svn/asterisk/branches/12 ........ Merged revisions 421187 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@421195 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -10217,12 +10217,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)
|
||||
|
Reference in New Issue
Block a user