From ad961fd7c3313f989d6fa16ba2fc9b138cee4cb5 Mon Sep 17 00:00:00 2001 From: George Joseph <gjoseph@digium.com> Date: Thu, 13 Sep 2018 10:06:00 -0600 Subject: [PATCH] stasis_cache: Stop caching stasis subscription change messages Since app_voicemail no longer uses the cache to maintain its state there is no longer a need to cache these messages. ASTERISK-27121 Change-Id: I321c708505f5ad8d00e1b0afc4c27dc2ac12ecb4 --- main/stasis_cache.c | 31 +++++++++---------------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/main/stasis_cache.c b/main/stasis_cache.c index 9907c6c226..acf6fd0db6 100644 --- a/main/stasis_cache.c +++ b/main/stasis_cache.c @@ -817,29 +817,16 @@ static void caching_topic_exec(void *data, struct stasis_subscription *sub, msg_type = stasis_message_type(message); + /* + * app_voicemail used to rely on the cache containing every topic subscribe and + * unsubscribe in order to determine if anyone was currently subscribed to a + * particular mailbox. This caused the cache to grow unabated for the life of + * the asterisk instance. Since it no longer needs the cache of these message + * types, and no other function needs them, we no longer cache them. + */ if (stasis_subscription_change_type() == msg_type) { - struct stasis_subscription_change *change = stasis_message_data(message); - - /* - * If this change type is an unsubscribe, we need to find the original - * subscribe and remove it from the cache otherwise the cache will - * continue to grow unabated. - */ - if (strcmp(change->description, "Unsubscribe") == 0) { - struct stasis_cache_entry *sub; - - 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(sub); - } - ao2_unlock(caching_topic->cache->entries); - ao2_cleanup(caching_topic_needs_unref); - return; - } - msg_put = message; - msg = message; + ao2_cleanup(caching_topic_needs_unref); + return; } else if (stasis_cache_clear_type() == msg_type) { /* Cache clear event. */ msg_put = NULL; -- GitLab