Prevent sending a NewExten event after a Hangup during a stack restore
authorMatthew Jordan <mjordan@digium.com>
Mon, 17 Jun 2013 14:40:23 +0000 (14:40 +0000)
committerMatthew Jordan <mjordan@digium.com>
Mon, 17 Jun 2013 14:40:23 +0000 (14:40 +0000)
commit50d81a58e8b7dee83bb0726e03a4e50edfce536f
tree6c7b92070f49f41262600c6e0f5bd1e7469dcc50
parent0afb1949c907db4d1d212f962435d65d080ec6df
Prevent sending a NewExten event after a Hangup during a stack restore

When a channel is originated, its application is typically set to AppDial2,
indicating that it was a dialed channel through the Dial API. Asterisk during
an originate will perform a stack execute to direct the outgoing channel to
a particular place in the dialplan or application. When the stack returns, the
previous application (AppDial2) is restored.

Unfortunately, in the case of an originated channel, the stack restore happens
after hangup. A stasis message is sent notifying everyone that the application
was restored, and this causes a NewExten event to go out after the Hangup event,
violating the basic contract consumers have of the channel lifetime. While we
could preclude the message from going out, restoring the channel's state before
it executed the next higher frame in the stack has to occur, and other places
in the code depend on this behavior.

Since we know that channel hung up (it's a ZOMBIE!), this patch simply checks
to see if the channel has been zombified before sending a NewExten event.

Note that this will fix a number of bouncing tests in the Test Suite. Go tests.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@392005 65c4cc65-6c06-0410-ace0-fbb531ad65f3
main/manager_channels.c