Fix local channel chains optimizing themselves out of a call.
authorRichard Mudgett <rmudgett@digium.com>
Fri, 4 May 2012 17:38:39 +0000 (17:38 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Fri, 4 May 2012 17:38:39 +0000 (17:38 +0000)
commit8842f76a7f486cd3d223a2c28ace91fcab5e8a12
tree5a345793633ec9dd99e21fee9420da8f2364376d
parent404b890f494399bba8bd160098af59d405b81b00
Fix local channel chains optimizing themselves out of a call.

* Made chan_local.c:check_bridge() check the return value of
ast_channel_masquerade().  In long chains of local channels, the
masquerade occasionally fails to get setup because there is another
masquerade already setup on an adjacent local channel in the chain.

* Made the outgoing local channel (the ;2 channel) flush one voice or
video frame per optimization attempt.

* Made sure that the outgoing local channel also does not have any frames
in its queue before the masquerade.

* Made do the masquerade immediately to minimize the chance that the
outgoing channel queue does not get any new frames added and thus
unconditionally flushed.

* Made block indication -1 (Stop tones) event when the local channel is
going to optimize itself out.  When the call is answered, a chain of local
channels pass down a -1 indication for each bridge.  This blizzard of -1
events really slows down the optimization process.

(closes issue ASTERISK-16711)
Reported by: Alec Davis
Tested by: rmudgett, Alec Davis
Review: https://reviewboard.asterisk.org/r/1894/
........

Merged revisions 365313 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 365320 from http://svn.asterisk.org/svn/asterisk/branches/10

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@365356 65c4cc65-6c06-0410-ace0-fbb531ad65f3
channels/chan_local.c