timer: Complain if a timer is set more than 5 seconds from now
authorHans de Goede <hdegoede@redhat.com>
Tue, 24 Jun 2014 14:23:13 +0000 (16:23 +0200)
committerPeter Hutterer <peter.hutterer@who-t.net>
Wed, 25 Jun 2014 01:13:39 +0000 (11:13 +1000)
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
src/timer.c

index f54618584b933063d67019b4d46ca5dd72ed04f3..3076bb7aac585cc8b5d1638593cfca871f1605e1 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <assert.h>
 #include <errno.h>
+#include <inttypes.h>
 #include <string.h>
 #include <sys/timerfd.h>
 #include <unistd.h>
@@ -65,6 +66,22 @@ libinput_timer_arm_timer_fd(struct libinput *libinput)
 void
 libinput_timer_set(struct libinput_timer *timer, uint64_t expire)
 {
+#ifndef NDEBUG
+       struct timespec ts;
+
+       if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) {
+               uint64_t now = ts.tv_sec * 1000ULL + ts.tv_nsec / 1000000;
+               if (abs(expire - now) > 5000)
+                       log_bug_libinput(timer->libinput,
+                                        "timer offset more than 5s, now %"
+                                        PRIu64 " expire %" PRIu64 "\n",
+                                        now, expire);
+       } else {
+               log_error(timer->libinput,
+                         "clock_gettime error: %s\n", strerror(errno));
+       }
+#endif
+
        assert(expire);
 
        if (!timer->expire)