]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fix a voicemail memory leak with heard/deleted messages.
authorJason Parker <jparker@digium.com>
Fri, 10 Feb 2012 21:45:22 +0000 (21:45 +0000)
committerJason Parker <jparker@digium.com>
Fri, 10 Feb 2012 21:45:22 +0000 (21:45 +0000)
open_mailbox() was changed quite a long time ago to allocate this memory.
close_mailbox() should have been changed to be responsible for freeing it.

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@354889 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_voicemail.c

index 591067ae36fd19e9d45e3a06352a157e632a97c7..e74d76db5f2b640984f5179e0e0b973975cf1119 100644 (file)
@@ -8027,11 +8027,11 @@ static int close_mailbox(struct vm_state *vms, struct ast_vm_user *vmu)
 #endif
 
 done:
-       if (vms->deleted && vmu->maxmsg) {
-               memset(vms->deleted, 0, vms->dh_arraysize * sizeof(int));
+       if (vms->deleted) {
+               ast_free(vms->deleted);
        }
-       if (vms->heard && vmu->maxmsg) {
-               memset(vms->heard, 0, vms->dh_arraysize * sizeof(int));
+       if (vms->heard) {
+               ast_free(vms->heard);
        }
 
        return 0;
@@ -10020,17 +10020,6 @@ static int vm_execmain(struct ast_channel *chan, const char *data)
        vmstate_insert(&vms);
        init_vm_state(&vms);
 #endif
-       /* Avoid allocating a buffer of 0 bytes, because some platforms really don't like that. */
-       if (!(vms.deleted = ast_calloc(vmu->maxmsg ? vmu->maxmsg : 1, 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");
-               return -1;
-       }
-       if (!(vms.heard = ast_calloc(vmu->maxmsg ? vmu->maxmsg : 1, sizeof(int)))) {
-               ast_log(AST_LOG_ERROR, "Could not allocate memory for heard message storage!\n");
-               cmd = ast_play_and_wait(chan, "an-error-has-occured");
-               return -1;
-       }
        
        /* Set language from config to override channel language */
        if (!ast_strlen_zero(vmu->language))
@@ -10613,10 +10602,6 @@ out:
 #endif
        if (vmu)
                free_user(vmu);
-       if (vms.deleted)
-               ast_free(vms.deleted);
-       if (vms.heard)
-               ast_free(vms.heard);
 
 #ifdef IMAP_STORAGE
        pthread_setspecific(ts_vmstate.key, NULL);