timer: print the timers still in the list before the assert
authorPeter Hutterer <peter.hutterer@who-t.net>
Wed, 6 Feb 2019 23:36:08 +0000 (09:36 +1000)
committerPeter Hutterer <peter.hutterer@who-t.net>
Mon, 11 Feb 2019 03:46:31 +0000 (13:46 +1000)
Helps a lot with debugging if we know which timer is still there during
cleanup.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
src/timer.c

index 584673a..3deaf5e 100644 (file)
@@ -49,6 +49,13 @@ libinput_timer_init(struct libinput_timer *timer,
 void
 libinput_timer_destroy(struct libinput_timer *timer)
 {
+       if (timer->link.prev != NULL && timer->link.prev != NULL &&
+           !list_empty(&timer->link)) {
+               log_bug_libinput(timer->libinput,
+                                "timer: %s has not been cancelled\n",
+                                timer->timer_name);
+               assert(!"timer not cancelled");
+       }
        free(timer->timer_name);
 }
 
@@ -200,6 +207,18 @@ libinput_timer_subsys_init(struct libinput *libinput)
 void
 libinput_timer_subsys_destroy(struct libinput *libinput)
 {
+#ifndef NDEBUG
+       if (!list_empty(&libinput->timer.list)) {
+               struct libinput_timer *t;
+
+               list_for_each(t, &libinput->timer.list, link) {
+                       log_bug_libinput(libinput,
+                                        "timer: %s still present on shutdown\n",
+                                        t->timer_name);
+               }
+       }
+#endif
+
        /* All timer users should have destroyed their timers now */
        assert(list_empty(&libinput->timer.list));