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
changes/97/197/1
Richard Mudgett 12 years ago
parent f5ae5e27c8
commit 51bd4fe8fe

@ -811,10 +811,6 @@ static void cdr_object_dtor(void *obj)
struct cdr_object *cdr = obj; struct cdr_object *cdr = obj;
struct ast_var_t *it_var; struct ast_var_t *it_var;
if (!cdr) {
return;
}
ao2_cleanup(cdr->party_a.snapshot); ao2_cleanup(cdr->party_a.snapshot);
ao2_cleanup(cdr->party_b.snapshot); ao2_cleanup(cdr->party_b.snapshot);
while ((it_var = AST_LIST_REMOVE_HEAD(&cdr->party_a.variables, entries))) { while ((it_var = AST_LIST_REMOVE_HEAD(&cdr->party_a.variables, entries))) {
@ -825,10 +821,8 @@ static void cdr_object_dtor(void *obj)
} }
ast_string_field_free_memory(cdr); ast_string_field_free_memory(cdr);
if (cdr->next) {
ao2_cleanup(cdr->next); ao2_cleanup(cdr->next);
} }
}
/*! /*!
* \brief \ref cdr_object constructor * \brief \ref cdr_object constructor
@ -850,6 +844,7 @@ static struct cdr_object *cdr_object_alloc(struct ast_channel_snapshot *chan)
} }
cdr->last = cdr; cdr->last = cdr;
if (ast_string_field_init(cdr, 64)) { if (ast_string_field_init(cdr, 64)) {
ao2_cleanup(cdr);
return NULL; return NULL;
} }
ast_string_field_set(cdr, name, chan->name); ast_string_field_set(cdr, name, chan->name);
@ -3985,7 +3980,9 @@ static void cdr_engine_shutdown(void)
aco_info_destroy(&cfg_info); aco_info_destroy(&cfg_info);
ao2_global_obj_release(module_configs); ao2_global_obj_release(module_configs);
ao2_container_unregister("cdrs_by_channel");
ao2_ref(active_cdrs_by_channel, -1); ao2_ref(active_cdrs_by_channel, -1);
active_cdrs_by_channel = NULL;
} }
static void cdr_enable_batch_mode(struct ast_cdr_config *config) static void cdr_enable_batch_mode(struct ast_cdr_config *config)

Loading…
Cancel
Save