mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-04 20:04:50 +00:00
stasis: Fix leaks
* Release reference returned by cache_remove * state_alloc unconditionally bumped state_topic even when it was locally allocated. Change-Id: I51101bf7d07b8dc8ce8fc46b6cb31fbbd213fbc7
This commit is contained in:
@@ -868,7 +868,7 @@ static void caching_topic_exec(void *data, struct stasis_subscription *sub,
|
|||||||
ao2_wrlock(caching_topic->cache->entries);
|
ao2_wrlock(caching_topic->cache->entries);
|
||||||
sub = cache_find(caching_topic->cache->entries, stasis_subscription_change_type(), change->uniqueid);
|
sub = cache_find(caching_topic->cache->entries, stasis_subscription_change_type(), change->uniqueid);
|
||||||
if (sub) {
|
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_cleanup(sub);
|
||||||
}
|
}
|
||||||
ao2_unlock(caching_topic->cache->entries);
|
ao2_unlock(caching_topic->cache->entries);
|
||||||
|
@@ -165,6 +165,13 @@ static struct stasis_state *state_alloc(struct stasis_state_manager *manager,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
ast_free(name);
|
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) {
|
if (!id) {
|
||||||
@@ -175,13 +182,6 @@ static struct stasis_state *state_alloc(struct stasis_state_manager *manager,
|
|||||||
id = state_id_by_topic(manager->all_topic, state_topic);
|
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);
|
state = ao2_alloc(sizeof(*state) + strlen(id) + 1, state_dtor);
|
||||||
if (!state) {
|
if (!state) {
|
||||||
ast_log(LOG_ERROR, "Unable to allocate state '%s' in manager '%s'\n",
|
ast_log(LOG_ERROR, "Unable to allocate state '%s' in manager '%s'\n",
|
||||||
|
Reference in New Issue
Block a user