From 8c444f823b4834a426f65a75ae1f3f978a9745d0 Mon Sep 17 00:00:00 2001 From: Kinsey Moore <kmoore@digium.com> Date: Fri, 15 Mar 2013 12:58:23 +0000 Subject: [PATCH] Make stasis unsubscription functions return NULL Unsubscribing things in Asterisk seems to very commonly follow with NULLing out the variable that was unsubscribed. This change makes that a bit simpler. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@383168 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- include/asterisk/stasis.h | 6 ++++-- main/stasis.c | 5 +++-- main/stasis_cache.c | 3 ++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/include/asterisk/stasis.h b/include/asterisk/stasis.h index 1d35bf87c9..9a5f7537c5 100644 --- a/include/asterisk/stasis.h +++ b/include/asterisk/stasis.h @@ -306,9 +306,10 @@ struct stasis_subscription *stasis_subscribe(struct stasis_topic *topic, * delivery of the final message. * * \param subscription Subscription to cancel. + * \retval NULL for convenience * \since 12 */ -void stasis_unsubscribe(struct stasis_subscription *subscription); +struct stasis_subscription *stasis_unsubscribe(struct stasis_subscription *subscription); /*! * \brief Create a subscription which forwards all messages from one topic to @@ -450,9 +451,10 @@ struct stasis_caching_topic *stasis_caching_topic_create(struct stasis_topic *or /*! * Unsubscribes a caching topic from its upstream topic. * \param caching_topic Caching topic to unsubscribe + * \retval NULL for convenience * \since 12 */ -void stasis_caching_unsubscribe(struct stasis_caching_topic *caching_topic); +struct stasis_caching_topic *stasis_caching_unsubscribe(struct stasis_caching_topic *caching_topic); /*! * \brief Returns the topic of cached events from a caching topics. diff --git a/main/stasis.c b/main/stasis.c index d1f11537ed..7f18bf5e17 100644 --- a/main/stasis.c +++ b/main/stasis.c @@ -172,7 +172,7 @@ struct stasis_subscription *stasis_subscribe(struct stasis_topic *topic, stasis_ return __stasis_subscribe(topic, callback, data, 1); } -void stasis_unsubscribe(struct stasis_subscription *sub) +struct stasis_subscription *stasis_unsubscribe(struct stasis_subscription *sub) { if (sub) { size_t i; @@ -186,12 +186,13 @@ void stasis_unsubscribe(struct stasis_subscription *sub) topic->subscribers[i] = topic->subscribers[--topic->num_subscribers_current]; /* Unsubscribing unrefs the subscription */ ao2_cleanup(sub); - return; + return NULL; } } ast_log(LOG_ERROR, "Internal error: subscription has invalid topic\n"); } + return NULL; } int stasis_subscription_is_subscribed(const struct stasis_subscription *sub) diff --git a/main/stasis_cache.c b/main/stasis_cache.c index f8518ce09d..a824928704 100644 --- a/main/stasis_cache.c +++ b/main/stasis_cache.c @@ -65,7 +65,7 @@ struct stasis_topic *stasis_caching_get_topic(struct stasis_caching_topic *cachi return caching_topic->topic; } -void stasis_caching_unsubscribe(struct stasis_caching_topic *caching_topic) +struct stasis_caching_topic *stasis_caching_unsubscribe(struct stasis_caching_topic *caching_topic) { if (caching_topic) { if (stasis_subscription_is_subscribed(caching_topic->sub)) { @@ -74,6 +74,7 @@ void stasis_caching_unsubscribe(struct stasis_caching_topic *caching_topic) ast_log(LOG_ERROR, "stasis_caching_topic unsubscribed multiple times\n"); } } + return NULL; } struct cache_entry { -- GitLab