stasis: Fixed message ordering issues when forwarding
authorDavid M. Lee <dlee@digium.com>
Mon, 1 Apr 2013 13:37:51 +0000 (13:37 +0000)
committerDavid M. Lee <dlee@digium.com>
Mon, 1 Apr 2013 13:37:51 +0000 (13:37 +0000)
commitb23e8e19507af448986554d4b360ca3ceefc4c18
tree365f657de1e64e80c2921f69d70c24414e3948e9
parent2d45dbc79bf3f65a1b74edfa27f4602a4ef68dd7
stasis: Fixed message ordering issues when forwarding

This patch fixes an issue of message ordering that occurs when
multiple topics are forwarded to an aggregator topic (such as
ast_channel_topic_all()).

It is (very reasonably) expected that the rules governing message
dispatch order still apply, so long as the messages start from the
same thread, and are received by the same subscription. Because the
existing code had an additional layer of dispatching via the Stasis
thread pool for forwards, those promises couldn't be kept.

Forwarding subscriptions no longer have their own mailbox, and now
dispatch directly from the forwarding topic's stasis_publish()
call. This means that the topic's lock is held for the duration of not
only a message's dispatch, but the dispatch of all the forwards. This
shouldn't be a problem right now, but if an aggregator topic had many
subscribers, it could become a problem. But I figure we can write more
clever code when the time comes, if necessary.

Review: https://reviewboard.asterisk.org/r/2419/

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@384413 65c4cc65-6c06-0410-ace0-fbb531ad65f3
main/stasis.c
tests/test_stasis.c