graph_list: Free old list when re-scanning.
authorFlorian Forster <ff@octo.it>
Fri, 30 Apr 2010 15:54:26 +0000 (17:54 +0200)
committerFlorian Forster <octo@leeloo.lan.home.verplant.org>
Fri, 30 Apr 2010 15:54:26 +0000 (17:54 +0200)
graph_list.c
graph_list.h

index baa8849..1306335 100644 (file)
@@ -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;
index 9fa1372..517b1b4 100644 (file)
@@ -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 : */