]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Memory leak on unload
authorTilghman Lesher <tilghman@meg.abyt.es>
Mon, 4 Aug 2008 16:56:19 +0000 (16:56 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Mon, 4 Aug 2008 16:56:19 +0000 (16:56 +0000)
(closes issue #13231)
 Reported by: eliel
 Patches:
       app_voicemail.leak.patch uploaded by eliel (license 64)

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

apps/app_voicemail.c

index 61bdfc45ab0093dfed6eb071d9e0e0bbffb7a2a9..09a6304450bd0bf640b26be83b53c63de928d7b6 100644 (file)
@@ -7844,10 +7844,28 @@ static struct ast_cli_entry cli_voicemail[] = {
        voicemail_show_zones_help, NULL, &cli_show_voicemail_zones_deprecated },
 };
 
-static int load_config(void)
+static void free_vm_users(void)
 {
        struct ast_vm_user *cur;
        struct vm_zone *zcur;
+
+       AST_LIST_LOCK(&users);
+       while ((cur = AST_LIST_REMOVE_HEAD(&users, list))) {
+               ast_set_flag(cur, VM_ALLOCED);
+               free_user(cur);
+       }
+       AST_LIST_UNLOCK(&users);
+
+       AST_LIST_LOCK(&zones);
+       while ((zcur = AST_LIST_REMOVE_HEAD(&zones, list))) {
+               free_zone(zcur);
+       }
+       AST_LIST_UNLOCK(&zones);
+}
+
+static int load_config(void)
+{
+       struct ast_vm_user *cur;
        struct ast_config *cfg, *ucfg;
        char *cat;
        struct ast_variable *var;
@@ -7897,16 +7915,9 @@ static int load_config(void)
 
        cfg = ast_config_load(VOICEMAIL_CONFIG);
 
-       AST_LIST_LOCK(&users);
-       while ((cur = AST_LIST_REMOVE_HEAD(&users, list))) {
-               ast_set_flag(cur, VM_ALLOCED);
-               free_user(cur);
-       }
+       free_vm_users();
 
-       AST_LIST_LOCK(&zones);
-       while ((zcur = AST_LIST_REMOVE_HEAD(&zones, list))) 
-               free_zone(zcur);
-       AST_LIST_UNLOCK(&zones);
+       AST_LIST_LOCK(&users);
 
        memset(ext_pass_cmd, 0, sizeof(ext_pass_cmd));