[asterisk-dev] [Code Review] 3836: app_bridgewait: Remove race condition where bridge may be dissolved when trying to join

Joshua Colp reviewboard at asterisk.org
Wed Jul 23 04:54:31 CDT 2014



> On July 22, 2014, 8:21 p.m., rmudgett wrote:
> > /branches/12/apps/app_bridgewait.c, lines 350-352
> > <https://reviewboard.asterisk.org/r/3836/diff/1/?file=65001#file65001line350>
> >
> >     Should check if the bridge in the wrapper is dissolved before returning the wrapper.  If it is dissolved, the wrapper needs to be unlinked and a new bridge created.
> >     
> >     Some joker could CLI "bridge destroy <id>" the BridgeWait holding bridge.  This would prevent new channels from entering the BridgeWait holding bridge until all channels that entered the bridging system in that holding bridge hangup.  It could take awhile if a channel was moved to a normal bridge.

I'm dropping this finding as on review 3840 I've made "bridge destroy" an internal developer only CLI command which should not be used under normal circumstances. In its place is a "bridge kick all" which is perfectly safe to do.


- Joshua


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/3836/#review12816
-----------------------------------------------------------


On July 22, 2014, 3:14 p.m., Joshua Colp wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/3836/
> -----------------------------------------------------------
> 
> (Updated July 22, 2014, 3:14 p.m.)
> 
> 
> Review request for Asterisk Developers.
> 
> 
> Bugs: ASTERISK-23987
>     https://issues.asterisk.org/jira/browse/ASTERISK-23987
> 
> 
> Repository: Asterisk
> 
> 
> Description
> -------
> 
> The BridgeWait application currently creates bridges with the dissolve on empty flag set. This causes the bridge to be dissolved when the last channel leaves it. This introduces a race condition where another channel may be trying to join during this, causing it to fail. Since the lifetime of the bridge is already associated with the bridge wrapper the bridge does not need the dissolve on empty flag set. When the last reference goes away the bridge is destroyed. This ensures that as long as anything has a reference to the bridge wrapper the bridge is valid and can be joined.
> 
> 
> Diffs
> -----
> 
>   /branches/12/apps/app_bridgewait.c 418809 
> 
> Diff: https://reviewboard.asterisk.org/r/3836/diff/
> 
> 
> Testing
> -------
> 
> Ran tests and confirmed no regressions.
> 
> 
> Thanks,
> 
> Joshua Colp
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20140723/8b482f61/attachment.html>


More information about the asterisk-dev mailing list