X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fcollectd.c;h=277d3b0dc9432917db2f0483ec812742148852e3;hb=61a1fa91ba73e4fe3a34949f77c5f017056f2b7a;hp=548a8fdd989c0772cb8b361079cdccbda4377edd;hpb=4b8debfceafebfe2d2465fefe1b8b501908f843c;p=collectd.git diff --git a/src/collectd.c b/src/collectd.c index 548a8fdd..277d3b0d 100644 --- a/src/collectd.c +++ b/src/collectd.c @@ -41,13 +41,14 @@ */ char hostname_g[DATA_MAX_NAME_LEN]; int interval_g; +int timeout_g; #if HAVE_LIBKSTAT kstat_ctl_t *kc; #endif /* HAVE_LIBKSTAT */ static int loop = 0; -static void *do_flush (void *arg) +static void *do_flush (void __attribute__((unused)) *arg) { INFO ("Flushing all data."); plugin_flush (NULL, -1, NULL); @@ -56,17 +57,17 @@ static void *do_flush (void *arg) return NULL; } -static void sig_int_handler (int signal) +static void sig_int_handler (int __attribute__((unused)) signal) { loop++; } -static void sig_term_handler (int signal) +static void sig_term_handler (int __attribute__((unused)) signal) { loop++; } -static void sig_usr1_handler (int signal) +static void sig_usr1_handler (int __attribute__((unused)) signal) { pthread_t thread; pthread_attr_t attr; @@ -102,9 +103,7 @@ static int init_hostname (void) } str = global_option_get ("FQDNLookup"); - if ((strcasecmp ("false", str) == 0) - || (strcasecmp ("no", str) == 0) - || (strcasecmp ("off", str) == 0)) + if (IS_FALSE (str)) return (0); memset (&ai_hints, '\0', sizeof (ai_hints)); @@ -150,6 +149,18 @@ static int init_global_variables (void) } DEBUG ("interval_g = %i;", interval_g); + str = global_option_get ("Timeout"); + if (str == NULL) + str = "2"; + timeout_g = atoi (str); + if (timeout_g <= 1) + { + fprintf (stderr, "Cannot set the timeout to a correct value.\n" + "Please check your settings.\n"); + return (-1); + } + DEBUG ("timeout_g = %i;", timeout_g); + if (init_hostname () != 0) return (-1); DEBUG ("hostname_g = %s;", hostname_g); @@ -261,9 +272,10 @@ static void exit_usage (int status) #endif " -h Display help (this message)\n" "\nBuiltin defaults:\n" - " Config-File "CONFIGFILE"\n" - " PID-File "PIDFILE"\n" - " Data-Directory "PKGLOCALSTATEDIR"\n" + " Config file "CONFIGFILE"\n" + " PID file "PIDFILE"\n" + " Plugin directory "PLUGINDIR"\n" + " Data directory "PKGLOCALSTATEDIR"\n" "\n"PACKAGE" "VERSION", http://collectd.org/\n" "by Florian octo Forster \n" "for contributions see `AUTHORS'\n"); @@ -301,6 +313,7 @@ static int do_loop (void) { struct timeval tv_now; struct timeval tv_next; + struct timeval tv_wait; struct timespec ts_wait; while (loop == 0) @@ -331,14 +344,17 @@ static int do_loop (void) return (-1); } - if (timeval_sub_timespec (&tv_next, &tv_now, &ts_wait) != 0) + if (timeval_cmp (tv_next, tv_now, &tv_wait) <= 0) { - WARNING ("Not sleeping because " - "`timeval_sub_timespec' returned " - "non-zero!"); + WARNING ("Not sleeping because the next interval is " + "%i.%06i seconds in the past!", + (int) tv_wait.tv_sec, (int) tv_wait.tv_usec); continue; } + ts_wait.tv_sec = tv_wait.tv_sec; + ts_wait.tv_nsec = (long) (1000 * tv_wait.tv_usec); + while ((loop == 0) && (nanosleep (&ts_wait, &ts_wait) == -1)) { if (errno != EINTR)