[asterisk-dev] [Code Review] Fix potential deadlock between masquerade and chan_local.

rmudgett reviewboard at asterisk.org
Fri May 11 12:05:43 CDT 2012

This is an automatically generated e-mail. To reply, visit:

Review request for Asterisk Developers.


ast_do_masquerade() calls ast_indicate() with the channel lock held.  This is a deadlock waiting to happen if the channel involved is a local channel.

* Restructure ast_do_masquerade() to not hold channel locks while it calls ast_indicate().

* Simplify many calls to ast_do_masquerade() since it will never return a failure now.  If it does fail internally because a channel driver callback operation failed, the only thing ast_do_masquerade() can do is generate a warning message about strange things may happen and press on.

* Fixed the call to ast_bridged_channel() in ast_do_masquerade().  This change fixes half of the deadlock reported in ASTERISK-19801 between masquerades and chan_iax.

This addresses bugs ASTERISK-19537 and ASTERISK-19801.


  /branches/1.8/main/channel.c 366290 

Diff: https://reviewboard.asterisk.org/r/1915/diff


A manual version of the yet to be written external test in ASTERISK-19807 passes.  I tested this patch with a call having a chain of 300 local channel pairs that optimize themselves out of the call.  It takes a minute for the local channels to get optimized out but once they are gone the call passes audio.



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20120511/04cc47ff/attachment.htm>

More information about the asterisk-dev mailing list