ao2_wrlock(caching_topic->cache->entries);
sub = cache_find(caching_topic->cache->entries, stasis_subscription_change_type(), change->uniqueid);
if (sub) {
- cache_remove(caching_topic->cache->entries, sub, stasis_message_eid(message));
+ ao2_cleanup(cache_remove(caching_topic->cache->entries, sub, stasis_message_eid(message)));
ao2_cleanup(sub);
}
ao2_unlock(caching_topic->cache->entries);
return NULL;
}
ast_free(name);
+ } else {
+ /*
+ * Since the state topic was passed in, go ahead and bump its reference.
+ * By doing this here first, it allows us to consistently decrease the reference on
+ * state allocation error.
+ */
+ ao2_ref(state_topic, +1);
}
if (!id) {
id = state_id_by_topic(manager->all_topic, state_topic);
}
- /*
- * Since the state topic could have been passed in, go ahead and bump its reference.
- * By doing this here first, it allows us to consistently decrease the reference on
- * state allocation error.
- */
- ao2_ref(state_topic, +1);
-
state = ao2_alloc(sizeof(*state) + strlen(id) + 1, state_dtor);
if (!state) {
ast_log(LOG_ERROR, "Unable to allocate state '%s' in manager '%s'\n",