]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
cdr: Fix some ref leaks.
authorRichard Mudgett <rmudgett@digium.com>
Fri, 6 Sep 2013 20:03:01 +0000 (20:03 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Fri, 6 Sep 2013 20:03:01 +0000 (20:03 +0000)
* 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

main/cdr.c

index 96689996961b4b1b08f4d3a20386e1fc4f7cb74c..3da59529865501725c345bbeb89e5a373d2bea32 100644 (file)
@@ -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)