From: Florian Forster Date: Sat, 13 Jul 2013 06:20:28 +0000 (+0200) Subject: src/plugin.c: Free the "data_sets" AVL tree. X-Git-Tag: collectd-5.3.1~1^2 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=0e835c8e64bb4bc9119948a3324a8a370bd10356;p=collectd.git src/plugin.c: Free the "data_sets" AVL tree. This pops up every time I investigate memory leaks and it's annoying me. --- diff --git a/src/plugin.c b/src/plugin.c index 809c140f..b0c82e39 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -939,6 +939,27 @@ int plugin_register_shutdown (const char *name, (void *) callback, /* user_data = */ NULL)); } /* int plugin_register_shutdown */ +static void plugin_free_data_sets (void) +{ + void *key; + void *value; + + if (data_sets == NULL) + return; + + while (c_avl_pick (data_sets, &key, &value) == 0) + { + data_set_t *ds = value; + /* key is a pointer to ds->type */ + + sfree (ds->ds); + sfree (ds); + } + + c_avl_destroy (data_sets); + data_sets = NULL; +} /* void plugin_free_data_sets */ + int plugin_register_data_set (const data_set_t *ds) { data_set_t *ds_copy; @@ -1450,6 +1471,8 @@ void plugin_shutdown_all (void) destroy_all_callbacks (&list_notification); destroy_all_callbacks (&list_shutdown); destroy_all_callbacks (&list_log); + + plugin_free_data_sets (); } /* void plugin_shutdown_all */ int plugin_dispatch_missing (const value_list_t *vl) /* {{{ */