plugin_read_all: Check the `loop' variable after each iteration and return early...
authorFlorian Forster <octo@leeloo.lan.home.verplant.org>
Mon, 6 Nov 2006 18:34:53 +0000 (19:34 +0100)
committerFlorian Forster <octo@leeloo.lan.home.verplant.org>
Mon, 6 Nov 2006 18:34:53 +0000 (19:34 +0100)
Lubos Stanek has reported that the daemon may stop too slow, resulting in it
being killed by impatient init-scripts. With this patch `plugin_read_all'
checks the `loop' variable before entering each plugin's read-function. If the
loop-variable is set to non-zero it will return early, allowing the daemon to
shutdown more instantly.

src/collectd.c
src/plugin.c
src/plugin.h

index 98b9a16..ef2ccc7 100644 (file)
@@ -193,7 +193,7 @@ static int start_client (void)
                curtime = time (NULL);
 
                /* Issue all plugins */
-               plugin_read_all ();
+               plugin_read_all (&loop);
 
                if (gettimeofday (&tv_now, NULL) < 0)
                {
index be28671..697449e 100644 (file)
@@ -276,11 +276,11 @@ void plugin_init_all (void)
 /*
  * Call `read' on all plugins (if given)
  */
-void plugin_read_all (void)
+void plugin_read_all (const int *loop)
 {
        plugin_t *p;
 
-       for (p = first_plugin; p != NULL; p = p->next)
+       for (p = first_plugin; (*loop == 0) && (p != NULL); p = p->next)
                if (p->read != NULL)
                        (*p->read) ();
 }
index e1e2e7c..a77c87f 100644 (file)
@@ -99,7 +99,7 @@ int  plugin_load (const char *type);
 
 int  plugin_load_all (char *dir);
 void plugin_init_all (void);
-void plugin_read_all (void);
+void plugin_read_all (const int *loop);
 
 void plugin_register (char *type,
                void (*init) (void),