diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index 85e1c38e00b823c624b5a7700e05947b1c503f37..1dd7aa0d07263315f53bd93203237849fca30e90 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -2026,10 +2026,6 @@ 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); @@ -2042,6 +2038,19 @@ static void free_user(struct ast_vm_user *vmu) } } +static void free_user_final(struct ast_vm_user *vmu) +{ + if (!vmu) { + return; + } + + if (!ast_strlen_zero(vmu->mailbox)) { + ast_delete_mwi_state_full(vmu->mailbox, vmu->context, NULL); + } + + free_user(vmu); +} + static int vm_allocate_dh(struct vm_state *vms, struct ast_vm_user *vmu, int count_msg) { int arraysize = (vmu->maxmsg > count_msg ? vmu->maxmsg : count_msg); @@ -13491,7 +13500,7 @@ static void free_vm_users(void) AST_LIST_LOCK(&users); while ((current = AST_LIST_REMOVE_HEAD(&users, list))) { ast_set_flag(current, VM_ALLOCED); - free_user(current); + free_user_final(current); } AST_LIST_UNLOCK(&users); }