summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2013-09-06 20:03:01 +0000
committerRichard Mudgett <rmudgett@digium.com>2013-09-06 20:03:01 +0000
commit51bd4fe8fec4d2b026148ba46d879eb9b9ff7fea (patch)
tree32719536b9115be73426f7042f3e5896c9cdea12 /main
parentf5ae5e27c83e7ada24d9c523fc4271a6e4ee9ef3 (diff)
cdr: Fix some ref leaks.
* Added missing unregister of the cdr container in cdr_engine_shutdown(). * Fixed ref leak in off nominal path of cdr_object_alloc(). * Removed some unnecessary NULL checks in cdr_object_dtor(). ........ Merged revisions 398562 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@398564 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main')
-rw-r--r--main/cdr.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/main/cdr.c b/main/cdr.c
index 966899969..3da595298 100644
--- a/main/cdr.c
+++ b/main/cdr.c
@@ -811,10 +811,6 @@ static void cdr_object_dtor(void *obj)
struct cdr_object *cdr = obj;
struct ast_var_t *it_var;
- if (!cdr) {
- return;
- }
-
ao2_cleanup(cdr->party_a.snapshot);
ao2_cleanup(cdr->party_b.snapshot);
while ((it_var = AST_LIST_REMOVE_HEAD(&cdr->party_a.variables, entries))) {
@@ -825,9 +821,7 @@ static void cdr_object_dtor(void *obj)
}
ast_string_field_free_memory(cdr);
- if (cdr->next) {
- ao2_cleanup(cdr->next);
- }
+ ao2_cleanup(cdr->next);
}
/*!
@@ -850,6 +844,7 @@ static struct cdr_object *cdr_object_alloc(struct ast_channel_snapshot *chan)
}
cdr->last = cdr;
if (ast_string_field_init(cdr, 64)) {
+ ao2_cleanup(cdr);
return NULL;
}
ast_string_field_set(cdr, name, chan->name);
@@ -3985,7 +3980,9 @@ static void cdr_engine_shutdown(void)
aco_info_destroy(&cfg_info);
ao2_global_obj_release(module_configs);
+ ao2_container_unregister("cdrs_by_channel");
ao2_ref(active_cdrs_by_channel, -1);
+ active_cdrs_by_channel = NULL;
}
static void cdr_enable_batch_mode(struct ast_cdr_config *config)