From 42951ae87738d2d359952459cae55237e6526ee1 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Fri, 30 Apr 2010 17:54:26 +0200 Subject: [PATCH] graph_list: Free old list when re-scanning. --- graph_list.c | 37 ++++++++++++++++++++++++++++++++++++- graph_list.h | 1 - 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/graph_list.c b/graph_list.c index baa8849..1306335 100644 --- a/graph_list.c +++ b/graph_list.c @@ -7,10 +7,43 @@ #include "graph_list.h" #include "common.h" +#define UPDATE_INTERVAL 10 + static graph_list_t *graph_list = NULL; static size_t graph_list_length = 0; static time_t gl_last_update = 0; +static void gl_clear_entry (graph_list_t *gl) /* {{{ */ +{ + if (gl == NULL) + return; + + free (gl->host); + free (gl->plugin); + free (gl->plugin_instance); + free (gl->type); + free (gl->type_instance); + + gl->host = NULL; + gl->plugin = NULL; + gl->plugin_instance = NULL; + gl->type = NULL; + gl->type_instance = NULL; +} /* }}} void gl_clear_entry */ + +static void gl_clear (void) +{ + size_t i; + + for (i = 0; i < graph_list_length; i++) + gl_clear_entry (graph_list + i); + + free (graph_list); + graph_list = NULL; + graph_list_length = 0; + gl_last_update = 0; +} /* }}} void gl_clear */ + static int gl_add_copy (graph_list_t *gl) /* {{{ */ { graph_list_t *ptr; @@ -166,9 +199,11 @@ int gl_update (void) /* {{{ */ now = time (NULL); - if ((gl_last_update + 2) >= now) + if ((gl_last_update + UPDATE_INTERVAL) >= now) return (0); + gl_clear (); + memset (&gl, 0, sizeof (gl)); gl.host = NULL; gl.plugin = NULL; diff --git a/graph_list.h b/graph_list.h index 9fa1372..517b1b4 100644 --- a/graph_list.h +++ b/graph_list.h @@ -16,6 +16,5 @@ typedef int (*gl_callback) (const graph_list_t *, void *); int gl_update (void); int gl_foreach (gl_callback callback, void *user_data); - #endif /* GRAPH_LIST_H */ /* vim: set sw=2 sts=2 et fdm=marker : */ -- 2.30.2