fix a place where code returns without unlocking the vm users list and various
authorRussell Bryant <russell@russellbryant.com>
Tue, 13 Jun 2006 04:37:36 +0000 (04:37 +0000)
committerRussell Bryant <russell@russellbryant.com>
Tue, 13 Jun 2006 04:37:36 +0000 (04:37 +0000)
places where code returns without destroying loaded configuration

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

apps/app_voicemail.c

index 313f338..a8636a2 100644 (file)
@@ -6452,6 +6452,8 @@ static int load_config(void)
                                                        }
                                                } else {
                                                        free(z);
+                                                       AST_LIST_UNLOCK(&users);
+                                                       ast_config_destroy(cfg);
                                                        return -1;
                                                }
                                                var = var->next;
@@ -6706,8 +6708,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");
 
@@ -6715,6 +6719,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);
+
        switch (option) {
        case 3:
                if (!res)
@@ -6852,8 +6858,6 @@ static int advanced_options(struct ast_channel *chan, struct ast_vm_user *vmu, s
                break;
        }
 
-       ast_config_destroy(msg_cfg);
-
        if (!res) {
                make_file(vms->fn, sizeof(vms->fn), vms->curdir, msg);
                vms->heard[msg] = 1;