diff options
Diffstat (limited to 'include/asterisk')
-rw-r--r-- | include/asterisk/security_events.h | 6 | ||||
-rw-r--r-- | include/asterisk/stasis.h | 19 | ||||
-rw-r--r-- | include/asterisk/stasis_bridging.h | 5 | ||||
-rw-r--r-- | include/asterisk/stasis_channels.h | 5 |
4 files changed, 18 insertions, 17 deletions
diff --git a/include/asterisk/security_events.h b/include/asterisk/security_events.h index a971444a4..547b54708 100644 --- a/include/asterisk/security_events.h +++ b/include/asterisk/security_events.h @@ -87,12 +87,6 @@ struct stasis_message_type *ast_security_event_type(void); int ast_security_stasis_init(void); /*! - * \brief removes stasis topic/event types for \ref ast_security_topic and \ref ast_security_event_type - * \since 12 - */ -void ast_security_stasis_cleanup(void); - -/*! * \brief Get the list of required IEs for a given security event sub-type * * \param[in] event_type security event sub-type diff --git a/include/asterisk/stasis.h b/include/asterisk/stasis.h index e6ea6fa13..edb38ad1d 100644 --- a/include/asterisk/stasis.h +++ b/include/asterisk/stasis.h @@ -633,6 +633,12 @@ struct ao2_container *stasis_cache_dump(struct stasis_caching_topic *caching_top /*! @{ */ /*! + * \internal + * \brief Log a message about invalid attempt to access a type. + */ +void stasis_log_bad_type_access(const char *name); + +/*! * \brief Boiler-plate removing macro for defining message types. * * \param name Name of message type. @@ -641,7 +647,9 @@ struct ao2_container *stasis_cache_dump(struct stasis_caching_topic *caching_top #define STASIS_MESSAGE_TYPE_DEFN(name) \ static struct stasis_message_type *_priv_ ## name; \ struct stasis_message_type *name(void) { \ - ast_assert(_priv_ ## name != NULL); \ + if (_priv_ ## name == NULL) { \ + stasis_log_bad_type_access(#name); \ + } \ return _priv_ ## name; \ } @@ -663,6 +671,15 @@ struct ao2_container *stasis_cache_dump(struct stasis_caching_topic *caching_top /*! * \brief Boiler-plate removing macro for cleaning up message types. * + * Note that if your type is defined in core instead of a loadable module, you + * should call message type cleanup from an ast_register_cleanup() handler + * instead of an ast_register_atexit() handler. + * + * The reason is that during an immediate shutdown, loadable modules (which may + * refer to core message types) are not unloaded. While the atexit handlers are + * run, there's a window of time where a module subscription might reference a + * core message type after it's been cleaned up. Which is bad. + * * \param name Name of message type. * \since 12 */ diff --git a/include/asterisk/stasis_bridging.h b/include/asterisk/stasis_bridging.h index 1b547a7d5..94bc4bc39 100644 --- a/include/asterisk/stasis_bridging.h +++ b/include/asterisk/stasis_bridging.h @@ -220,11 +220,6 @@ void ast_bridge_publish_leave(struct ast_bridge *bridge, struct ast_channel *cha struct ast_json *ast_bridge_snapshot_to_json(const struct ast_bridge_snapshot *snapshot); /*! - * \brief Dispose of the stasis bridging topics and message types - */ -void ast_stasis_bridging_shutdown(void); - -/*! * \brief Initialize the stasis bridging topic and message types * \retval 0 on success * \retval -1 on failure diff --git a/include/asterisk/stasis_channels.h b/include/asterisk/stasis_channels.h index e3beb03ce..e521e05eb 100644 --- a/include/asterisk/stasis_channels.h +++ b/include/asterisk/stasis_channels.h @@ -462,11 +462,6 @@ int ast_channel_snapshot_caller_id_equal( const struct ast_channel_snapshot *new_snapshot); /*! - * \brief Dispose of the stasis channel topics and message types - */ -void ast_stasis_channels_shutdown(void); - -/*! * \brief Initialize the stasis channel topic and message types */ void ast_stasis_channels_init(void); |