diff options
author | Kinsey Moore <kmoore@digium.com> | 2014-11-13 15:44:28 +0000 |
---|---|---|
committer | Kinsey Moore <kmoore@digium.com> | 2014-11-13 15:44:28 +0000 |
commit | 5013659972a4678ca7f6f64512ee9d5fc7172882 (patch) | |
tree | e032e77ff7f2f5cf78823015422dba84d8f0db06 /include/asterisk | |
parent | 153cfb4c2d5eef57651a7d1443e6b95878c1f9c7 (diff) |
Stasis: Fix StasisEnd message ordering
This change corrects message ordering in cases where a channel-related
message can be received after a Stasis/ARI application has received the
StasisEnd message. The StasisEnd message was being passed to
applications directly without waiting for the channel topic to empty.
As a result of this fix, other bugs were also identified and fixed:
* StasisStart messages were also being sent directly to apps and are
now routed through the stasis message bus properly
* Masquerade monitor datastores were being removed at the incorrect
time in some cases and were causing StasisEnd messages to not be sent
* General refactoring where necessary for the above
* Unsubscription on StasisEnd timing changes to prevent additional
messages from following the StasisEnd when they shouldn't
A channel sanitization function pointer was added to reduce processing
and AO2 lookups.
Review: https://reviewboard.asterisk.org/r/4163/
ASTERISK-24501 #close
Reported by: Matt Jordan
........
Merged revisions 427788 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@427789 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'include/asterisk')
-rw-r--r-- | include/asterisk/stasis.h | 11 | ||||
-rw-r--r-- | include/asterisk/stasis_app.h | 5 |
2 files changed, 11 insertions, 5 deletions
diff --git a/include/asterisk/stasis.h b/include/asterisk/stasis.h index b8dc4c845..4189513ac 100644 --- a/include/asterisk/stasis.h +++ b/include/asterisk/stasis.h @@ -221,6 +221,17 @@ struct stasis_message_sanitizer { * \retval zero if the channel should remain in the message */ int (*channel_snapshot)(const struct ast_channel_snapshot *snapshot); + + /*! + * \brief Callback which determines whether a channel should be sanitized from + * a message based on the channel + * + * \param chan The channel to be checked + * + * \retval non-zero if the channel should be left out of the message + * \retval zero if the channel should remain in the message + */ + int (*channel)(const struct ast_channel *chan); }; /*! diff --git a/include/asterisk/stasis_app.h b/include/asterisk/stasis_app.h index 2e5901cb6..e47275480 100644 --- a/include/asterisk/stasis_app.h +++ b/include/asterisk/stasis_app.h @@ -791,11 +791,6 @@ void stasis_app_unref(void); struct stasis_message_sanitizer *stasis_app_get_sanitizer(void); /*! - * \brief Stasis message type for a StasisEnd event - */ -struct stasis_message_type *ast_stasis_end_message_type(void); - -/*! * \brief Indicate that this channel has had a StasisEnd published for it * * \param The channel that is exiting Stasis. |