collectd-tg: Fix sleep interval.
authorFlorian Forster <octo@collectd.org>
Fri, 11 Nov 2016 13:34:20 +0000 (14:34 +0100)
committerFlorian Forster <octo@collectd.org>
Fri, 11 Nov 2016 13:36:15 +0000 (14:36 +0100)
nanosleep() was called with the current time, meaning that it would
block for years. This correctly subtracts "now" from the metric's time
and only sleeps for the duration between the two.

src/collectd-tg.c

index 7db9fe7..273265c 100644 (file)
@@ -414,11 +414,11 @@ int main (int argc, char **argv) /* {{{ */
 
       while (now < vl->time)
       {
-        /* 1 / 100 second */
-        struct timespec ts = { 0, 10000000 };
-
-        ts.tv_sec = (time_t) now;
-        ts.tv_nsec = (long) ((now - ((double) ts.tv_sec)) * 1e9);
+        double diff = vl->time - now;
+        struct timespec ts = {
+          .tv_sec = (time_t) diff,
+        };
+        ts.tv_nsec = (long) ((diff - ((double) ts.tv_sec)) * 1e9);
 
         nanosleep (&ts, /* remaining = */ NULL);
         now = dtime ();