diff options
author | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-06-13 04:31:19 +0000 |
---|---|---|
committer | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-06-13 04:31:19 +0000 |
commit | 1df9181d0beea099f13d44f3603bbcbd51a6b341 (patch) | |
tree | 20f15aa650d71a4760a1b79136e1ac893eb25c32 /apps/app_voicemail.c | |
parent | a76229a178eb679a8dd83bfe0274a68f8a5bc3ee (diff) |
fix various places where the code returns without unlocking vmlock or
destroying loaded configuration
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.2@33783 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps/app_voicemail.c')
-rw-r--r-- | apps/app_voicemail.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c index b61b54d62..c08a563e8 100644 --- a/apps/app_voicemail.c +++ b/apps/app_voicemail.c @@ -6172,10 +6172,14 @@ static int load_config(void) } else { ast_log(LOG_WARNING, "Out of memory while reading voicemail config\n"); free(z); + ast_mutex_unlock(&vmlock); + ast_config_destroy(cfg); return -1; } } else { ast_log(LOG_WARNING, "Out of memory while reading voicemail config\n"); + ast_mutex_unlock(&vmlock); + ast_config_destroy(cfg); return -1; } var = var->next; @@ -6435,8 +6439,10 @@ static int advanced_options(struct ast_channel *chan, struct ast_vm_user *vmu, s return 0; } - if (!(origtime = ast_variable_retrieve(msg_cfg, "message", "origtime"))) + if (!(origtime = ast_variable_retrieve(msg_cfg, "message", "origtime"))) { + ast_config_destroy(msg_cfg); return 0; + } cid = ast_variable_retrieve(msg_cfg, "message", "callerid"); @@ -6444,6 +6450,8 @@ static int advanced_options(struct ast_channel *chan, struct ast_vm_user *vmu, s if (!strncasecmp("macro",context,5)) /* Macro names in contexts are useless for our needs */ context = ast_variable_retrieve(msg_cfg, "message","macrocontext"); + ast_config_destroy(msg_cfg); + if (option == 3) { if (!res) @@ -6576,8 +6584,6 @@ static int advanced_options(struct ast_channel *chan, struct ast_vm_user *vmu, s } } - ast_config_destroy(msg_cfg); - if (!res) { make_file(vms->fn, sizeof(vms->fn), vms->curdir, msg); vms->heard[msg] = 1; |