Merge branch 'pull/master'
authorFlorian octo Forster <octo@dev4.office.noris.de>
Wed, 27 Feb 2008 09:24:03 +0000 (10:24 +0100)
committerFlorian octo Forster <octo@dev4.office.noris.de>
Wed, 27 Feb 2008 09:24:03 +0000 (10:24 +0100)
1  2 
src/collectd.c

diff --combined src/collectd.c
@@@ -27,6 -27,8 +27,8 @@@
  #include <sys/socket.h>
  #include <netdb.h>
  
+ #include <pthread.h>
  #include "plugin.h"
  #include "configfile.h"
  
@@@ -41,6 -43,15 +43,15 @@@ kstat_ctl_t *kc
  
  static int loop = 0;
  
+ static void *do_flush (void *arg)
+ {
+       INFO ("Flushing all data.");
+       plugin_flush_all (-1);
+       INFO ("Finished flushing all data.");
+       pthread_exit (NULL);
+       return NULL;
+ }
  static void sigIntHandler (int signal)
  {
        loop++;
@@@ -51,6 -62,18 +62,18 @@@ static void sigTermHandler (int signal
        loop++;
  }
  
+ static void sigUsr1Handler (int signal)
+ {
+       pthread_t      thread;
+       pthread_attr_t attr;
+       /* flushing the data might take a while,
+        * so it should be done asynchronously */
+       pthread_attr_init (&attr);
+       pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
+       pthread_create (&thread, &attr, do_flush, NULL);
+ }
  static int init_hostname (void)
  {
        const char *str;
@@@ -227,13 -250,11 +250,13 @@@ static void exit_usage (void
                        "  General:\n"
                        "    -C <file>       Configuration file.\n"
                        "                    Default: "CONFIGFILE"\n"
 +                      "    -t              Test config and exit.\n"
                        "    -P <file>       PID-file.\n"
                        "                    Default: "PIDFILE"\n"
  #if COLLECT_DAEMON
                        "    -f              Don't fork to the background.\n"
  #endif
 +                      "    -h              Display help (this message)\n"
                        "\nBuiltin defaults:\n"
                        "  Config-File       "CONFIGFILE"\n"
                        "  PID-File          "PIDFILE"\n"
@@@ -369,6 -390,7 +392,7 @@@ int main (int argc, char **argv
  {
        struct sigaction sigIntAction;
        struct sigaction sigTermAction;
+       struct sigaction sigUsr1Action;
        char *configfile = CONFIGFILE;
        int test_config  = 0;
        const char *basedir;
        sigTermAction.sa_handler = sigTermHandler;
        sigaction (SIGTERM, &sigTermAction, NULL);
  
+       memset (&sigUsr1Action, '\0', sizeof (sigUsr1Action));
+       sigUsr1Action.sa_handler = sigUsr1Handler;
+       sigaction (SIGUSR1, &sigUsr1Action, NULL);
        /*
         * run the actual loops
         */