]> git.ipfire.org Git - thirdparty/asterisk.git/commit
Stasis: Fix StasisStart/End order and missing events
authorKinsey Moore <kmoore@digium.com>
Mon, 8 Dec 2014 15:45:46 +0000 (15:45 +0000)
committerKinsey Moore <kmoore@digium.com>
Mon, 8 Dec 2014 15:45:46 +0000 (15:45 +0000)
commit4bb556a8478741dc81361327d3a50a8809be09f6
tree792c883b590f06389a70e288138ad42a3e146ac6
parent49aa87e17cd1959d79672807697813009cf6da75
Stasis: Fix StasisStart/End order and missing events

This corrects several bugs that currently exist in the stasis
application code.

* After a masquerade, the resulting channels have channel topics that
  do not match their uniqueids
** Masquerades now swap channel topics appropriately
* StasisStart and StasisEnd messages are leaked to observer
  applications due to being published on channel topics
** StasisStart and StasisEnd publishing is now properly restricted
   to controlling apps via app topics
* Race conditions exist where StasisStart and StasisEnd messages due to
  a masquerade may be received out of order due to being published on
  different topics
** These messages are now published directly on the app topic so this
   is now a non-issue
* StasisEnds are sometimes missing when sent due to masquerades and
  bridge swaps into and out of Stasis()
** This was due to StasisEnd processing adjusting message-sent flags
   after Stasis() had already exited and Stasis() had been re-entered
** This was corrected by adjusting these flags prior to sending the
   message while the initial Stasis() application was still shutting
   down

Review: https://reviewboard.asterisk.org/r/4213/
ASTERISK-24537 #close
Reported by: Matt DiMeo
........

Merged revisions 429061 from http://svn.asterisk.org/svn/asterisk/branches/12
........

Merged revisions 429062 from http://svn.asterisk.org/svn/asterisk/branches/13

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@429063 65c4cc65-6c06-0410-ace0-fbb531ad65f3
include/asterisk/channel.h
main/channel.c
main/channel_internal_api.c
res/res_stasis.c
res/stasis/app.c
res/stasis/app.h
res/stasis/stasis_bridge.c