[asterisk-bugs] [JIRA] (ASTERISK-23780) Failing to join a bridge could leave the bridge orphaned.

Rusty Newton (JIRA) noreply at issues.asterisk.org
Fri May 23 16:10:45 CDT 2014


     [ https://issues.asterisk.org/jira/browse/ASTERISK-23780?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Rusty Newton updated ASTERISK-23780:
------------------------------------

    Affects Version/s:     (was: 12.0.0)
                       SVN
                       12.2.0

> Failing to join a bridge could leave the bridge orphaned.
> ---------------------------------------------------------
>
>                 Key: ASTERISK-23780
>                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-23780
>             Project: Asterisk
>          Issue Type: Bug
>      Security Level: None
>          Components: Applications/app_bridgewait, Core/Bridging
>    Affects Versions: SVN, 12.2.0
>            Reporter: Richard Mudgett
>
> A typical two party bridge gets the participants into it by using {{ast_bridge_impart()}} for the peer channel and {{ast_bridge_join(AST_BRIDGE_JOIN_PASS_REFERENCE)}} for the calling channel as in {{ast_bridge_call_with_flags()}}.  Unfortunately, if the channels fail to join the bridge for some reason (e.g., The channel hangs up before joining.) then the bridge could get orphaned and never destroyed.  The caller of {{ast_bridge_join(AST_BRIDGE_JOIN_PASS_REFERENCE)}} cannot correct this because it *intentionally* no longer has a bridge reference.
> Proposed solution:
> * Make {{ast_bridge_join()}} and {{ast_bridge_impart()}} do the {{bridge_channel_dissolve_check()}} as if the channel had just left the bridge.
> * Any hooks that are marked {{AST_BRIDGE_HOOK_REMOVE_ON_PULL}} should be removed as if the channel was pulled out of the bridge.  Currently only one bridge join failure path removes the hooks causing an inconsistent return state.  This may need to be the other way around and not remove these hooks if joining fails.
> The {{BridgeWait}} application needs to be fixed up if the channel fails to join the bridge in {{bridgewait_exec()}} because the interval hook may not be there if/when the channel fails to join the bridge.  Also {{BridgeWait}} looks to get in an infinite loop if the channel hangs up or becomes a ZOMBIE while {{BridgeWait}} is trying to put it into the holding bridge.



--
This message was sent by Atlassian JIRA
(v6.2#6252)



More information about the asterisk-bugs mailing list