Merge "stasis: No need to keep a stasis type ref in a stasis msg or cache object." into 16

This commit is contained in:
George Joseph
2018-09-20 13:09:53 -05:00
committed by Gerrit Code Review
2 changed files with 18 additions and 4 deletions

View File

@@ -156,7 +156,6 @@ static void cache_entry_dtor(void *obj)
struct stasis_cache_entry *entry = obj;
size_t idx;
ao2_cleanup(entry->key.type);
entry->key.type = NULL;
ast_free((char *) entry->key.id);
entry->key.id = NULL;
@@ -204,7 +203,16 @@ static struct stasis_cache_entry *cache_entry_create(struct stasis_message_type
ao2_cleanup(entry);
return NULL;
}
entry->key.type = ao2_bump(type);
/*
* Normal ao2 ref counting rules says we should increment the message
* type ref here and decrement it in cache_entry_dtor(). However, the
* stasis message snapshot is cached here, will always have the same type
* as the cache entry, and can legitimately cause the type ref count to
* hit the excessive ref count assertion. Since the cache entry will
* always have a snapshot we can get away with not holding a ref here.
*/
ast_assert(type == stasis_message_type(snapshot));
entry->key.type = type;
cache_entry_compute_hash(&entry->key);
is_remote = ast_eid_cmp(&ast_eid_default, stasis_message_eid(snapshot)) ? 1 : 0;