From: George Joseph Date: Thu, 20 Sep 2018 15:15:48 +0000 (-0600) Subject: app_voicemail: Cleanup mailbox topic and cache X-Git-Tag: 13.24.0-rc1~95^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7bdf1d3c672cf1c01ed3727cde64f2eec374d5d6;p=thirdparty%2Fasterisk.git app_voicemail: Cleanup mailbox topic and cache app_voicemail wasn't properly cleaning up the stasis cache or the mwi topic pool when the module was unloaded or when a user was deleted as a result of a reload. This resulted in leaks in both areas. * app_voicemail now calls ast_delete_mwi_state_full when it frees a user structure and ast_delete_mwi_state_full in turn now calls the new stasis_topic_pool_delete_topic function to clear the topic from the pool. Change-Id: Ide23144a4a810e7e0faad5a8e988d15947965df8 --- diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index f2b6c97a3a..b371e4722e 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -2004,6 +2004,10 @@ static void free_user(struct ast_vm_user *vmu) return; } + if (!ast_strlen_zero(vmu->mailbox)) { + ast_delete_mwi_state_full(vmu->mailbox, vmu->context, NULL); + } + ast_free(vmu->email); vmu->email = NULL; ast_free(vmu->emailbody); diff --git a/main/app.c b/main/app.c index e7aab10b1f..bc28ef6913 100644 --- a/main/app.c +++ b/main/app.c @@ -3355,6 +3355,9 @@ int ast_delete_mwi_state_full(const char *mailbox, const char *context, struct a if (clear_msg) { stasis_publish(mailbox_specific_topic, clear_msg); } + + stasis_topic_pool_delete_topic(mwi_topic_pool, stasis_topic_name(mailbox_specific_topic)); + ao2_cleanup(clear_msg); return 0; }