aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2008-08-04 16:56:19 +0000
committertilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2008-08-04 16:56:19 +0000
commitd42d831334e2c6b6346b47275de541f5fa2f3680 (patch)
tree1d95a7456f397ad9b36126ad14343f7ba2e2d3a7
parent201416b253e691587a2b0f198929e1f2cfe56b2a (diff)
Memory leak on unload
(closes issue #13231) Reported by: eliel Patches: app_voicemail.leak.patch uploaded by eliel (license 64) git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@135479 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--apps/app_voicemail.c31
1 files changed, 21 insertions, 10 deletions
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index 61bdfc45a..09a630445 100644
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -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));