diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index 0e7784544aa57dbcf1ff706b7adf15f84db36dc3..bcd0b484c2ad18d3cda58e53eff78be2e816cb08 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -9069,6 +9069,10 @@ static int vm_execmain(struct ast_channel *chan, void *data) /* If ADSI is supported, setup login screen */ adsi_begin(chan, &useadsi); + if (!valid) { + goto out; + } + #ifdef IMAP_STORAGE pthread_once(&ts_vmstate.once, ts_vmstate.key_init); pthread_setspecific(ts_vmstate.key, &vms); @@ -9080,9 +9084,6 @@ static int vm_execmain(struct ast_channel *chan, void *data) vmstate_insert(&vms); init_vm_state(&vms); #endif - if (!valid) - goto out; - if (!(vms.deleted = ast_calloc(vmu->maxmsg, sizeof(int)))) { ast_log(AST_LOG_ERROR, "Could not allocate memory for deleted message storage!\n"); cmd = ast_play_and_wait(chan, "an-error-has-occured"); @@ -9634,7 +9635,9 @@ out: } /* before we delete the state, we should copy pertinent info * back to the persistent model */ - vmstate_delete(&vms); + if (vmu) { + vmstate_delete(&vms); + } #endif if (vmu) free_user(vmu);