summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorzuul <zuul@gerrit.asterisk.org>2016-07-14 12:14:44 -0500
committerGerrit Code Review <gerrit2@gerrit.digium.api>2016-07-14 12:14:44 -0500
commit707dbcbcd1300a54f7d157fb4535d18463ece699 (patch)
treeda566326e5e8e8f1ae006c0611b812d3a9814516 /main
parentbea3e9b6fbe21d6bf7eb3e262c45ff53283098bf (diff)
parentf3608b50d7c87c34b5a70d97ed4955b7039ce485 (diff)
Merge "pbx: Fix leak of timezone for time based includes."
Diffstat (limited to 'main')
-rw-r--r--main/pbx.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/main/pbx.c b/main/pbx.c
index df9cad326..f065b1a28 100644
--- a/main/pbx.c
+++ b/main/pbx.c
@@ -4755,6 +4755,13 @@ static struct ast_context *find_context_locked(const char *context)
return c;
}
+/*! \brief Free an ast_include and associated data. */
+static void include_free(struct ast_include *include)
+{
+ ast_destroy_timing(&(include->timing));
+ ast_free(include);
+}
+
/*!
* \brief Remove included contexts.
* This function locks contexts list by &conlist, search for the right context
@@ -4802,8 +4809,7 @@ int ast_context_remove_include2(struct ast_context *con, const char *include, co
else
con->includes = i->next;
/* free include and return */
- ast_destroy_timing(&(i->timing));
- ast_free(i);
+ include_free(i);
ret = 0;
break;
}
@@ -6613,8 +6619,7 @@ int ast_context_add_include2(struct ast_context *con, const char *value,
/* ... go to last include and check if context is already included too... */
for (i = con->includes; i; i = i->next) {
if (!strcasecmp(i->name, new_include->name)) {
- ast_destroy_timing(&(new_include->timing));
- ast_free(new_include);
+ include_free(new_include);
ast_unlock_context(con);
errno = EEXIST;
return -1;
@@ -7838,7 +7843,7 @@ static void __ast_internal_context_destroy( struct ast_context *con)
for (tmpi = tmp->includes; tmpi; ) { /* Free includes */
struct ast_include *tmpil = tmpi;
tmpi = tmpi->next;
- ast_free(tmpil);
+ include_free(tmpil);
}
for (ipi = tmp->ignorepats; ipi; ) { /* Free ignorepats */
struct ast_ignorepat *ipl = ipi;
@@ -7932,12 +7937,12 @@ void __ast_context_destroy(struct ast_context *list, struct ast_hashtab *context
if (pi) {
pi->next = i->next;
/* free include */
- ast_free(i);
+ include_free(i);
continue; /* don't change pi */
} else {
tmp->includes = i->next;
/* free include */
- ast_free(i);
+ include_free(i);
continue; /* don't change pi */
}
}