aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorseanbright <seanbright@f38db490-d61c-443f-a65b-d21fe96a405b>2010-01-18 20:01:50 +0000
committerseanbright <seanbright@f38db490-d61c-443f-a65b-d21fe96a405b>2010-01-18 20:01:50 +0000
commit3fba5db04a73f1c6e61e9b9b34155ab80a6859f3 (patch)
tree067667aceda281786435fd58c15448d4b4087562 /main
parent08503f82fbcf04e09a3de4250defc71758f96f5e (diff)
Merged revisions 241016 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ................ r241016 | seanbright | 2010-01-18 14:57:52 -0500 (Mon, 18 Jan 2010) | 19 lines Merged revisions 241015 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r241015 | seanbright | 2010-01-18 14:54:19 -0500 (Mon, 18 Jan 2010) | 12 lines Plug a memory leak when reading configs with their comments. While reading through configuration files with the intent of returning their full contents (comments specifically) we allocated some memory and then forgot to free it. This doesn't fix 16554 but clears up a leak I had in the lab. (issue #16554) Reported by: mav3rick Patches: issue16554_20100118.patch uploaded by seanbright (license 71) Tested by: seanbright ........ ................ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.2@241019 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main')
-rw-r--r--main/config.c40
1 files changed, 18 insertions, 22 deletions
diff --git a/main/config.c b/main/config.c
index 0f8825372..eb2ec169d 100644
--- a/main/config.c
+++ b/main/config.c
@@ -382,6 +382,18 @@ void ast_variable_insert(struct ast_category *category, struct ast_variable *var
}
}
+static void ast_comment_destroy(struct ast_comment **comment)
+{
+ struct ast_comment *n, *p;
+
+ for (p = *comment; p; p = n) {
+ n = p->next;
+ ast_free(p);
+ }
+
+ *comment = NULL;
+}
+
void ast_variables_destroy(struct ast_variable *v)
{
struct ast_variable *vn;
@@ -389,6 +401,9 @@ void ast_variables_destroy(struct ast_variable *v)
while (v) {
vn = v;
v = v->next;
+ ast_comment_destroy(&vn->precomments);
+ ast_comment_destroy(&vn->sameline);
+ ast_comment_destroy(&vn->trailing);
ast_free(vn);
}
}
@@ -535,27 +550,6 @@ void ast_category_insert(struct ast_config *config, struct ast_category *cat, co
}
}
-static void ast_destroy_comments(struct ast_category *cat)
-{
- struct ast_comment *n, *p;
-
- for (p=cat->precomments; p; p=n) {
- n = p->next;
- free(p);
- }
- for (p=cat->sameline; p; p=n) {
- n = p->next;
- free(p);
- }
- for (p=cat->trailing; p; p=n) {
- n = p->next;
- free(p);
- }
- cat->precomments = NULL;
- cat->sameline = NULL;
- cat->trailing = NULL;
-}
-
static void ast_destroy_template_list(struct ast_category *cat)
{
struct ast_category_template_instance *x;
@@ -571,7 +565,9 @@ void ast_category_destroy(struct ast_category *cat)
free(cat->file);
cat->file = 0;
}
- ast_destroy_comments(cat);
+ ast_comment_destroy(&cat->precomments);
+ ast_comment_destroy(&cat->sameline);
+ ast_comment_destroy(&cat->trailing);
ast_destroy_template_list(cat);
ast_free(cat);
}