mirror of
https://github.com/asterisk/asterisk.git
synced 2026-07-22 14:34:09 -07:00
Fix a voicemail memory leak with heard/deleted messages.
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. ........ Merged revisions 354889 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 354890 from http://svn.asterisk.org/svn/asterisk/branches/10 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@354903 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
+4
-19
@@ -8133,11 +8133,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;
|
||||
@@ -10126,17 +10126,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))
|
||||
@@ -10719,10 +10708,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);
|
||||
|
||||
Reference in New Issue
Block a user