summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKinsey Moore <kmoore@digium.com>2013-03-15 12:58:23 +0000
committerKinsey Moore <kmoore@digium.com>2013-03-15 12:58:23 +0000
commit8c444f823b4834a426f65a75ae1f3f978a9745d0 (patch)
tree861e56b013fbc6628edb7e929a1f2dc31f9f6897
parentad5f3a5759a6e86e364811198432dcc7597f6109 (diff)
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
-rw-r--r--include/asterisk/stasis.h6
-rw-r--r--main/stasis.c5
-rw-r--r--main/stasis_cache.c3
3 files changed, 9 insertions, 5 deletions
diff --git a/include/asterisk/stasis.h b/include/asterisk/stasis.h
index 1d35bf87c..9a5f7537c 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 d1f11537e..7f18bf5e1 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 f8518ce09..a82492870 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 {