mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-04 11:58:52 +00:00
Revert "stasis_cache: Stop caching stasis subscription change messages"
This reverts commit 5ec6d2c33e
.
This commit caused issues with polling when combined with
the revert commit "Revert "app_voicemail: Remove need to subscribe to stasis"
ASTERISK-28222
Reported by: abelbeck
Change-Id: I1e83a433e4202574181bc128dce876ef24936a52
This commit is contained in:
@@ -854,16 +854,29 @@ static void caching_topic_exec(void *data, struct stasis_subscription *sub,
|
|||||||
|
|
||||||
msg_type = stasis_message_type(message);
|
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) {
|
if (stasis_subscription_change_type() == msg_type) {
|
||||||
ao2_cleanup(caching_topic_needs_unref);
|
struct stasis_subscription_change *change = stasis_message_data(message);
|
||||||
return;
|
|
||||||
|
/*
|
||||||
|
* 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;
|
||||||
} else if (stasis_cache_clear_type() == msg_type) {
|
} else if (stasis_cache_clear_type() == msg_type) {
|
||||||
/* Cache clear event. */
|
/* Cache clear event. */
|
||||||
msg_put = NULL;
|
msg_put = NULL;
|
||||||
|
Reference in New Issue
Block a user