From cfb0a39aba03e3053f9135c59765b2367b8780e0 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 17 Jul 2017 11:58:11 +1000 Subject: [PATCH] timer: if a timer is inactive, do not call the timer func Race conditions may happen where code that cancels a timer is called just as that timer triggers. If we cancel a timer, we assume that we've put the code into a state where the timer firing will trigger a bug. This could be observed with the middle button code if the release event was held back just long enough. The button release code cancelled the timer, set the state back to idle and then complained when the timeout handling sent a 'timeout' event while being in idle. Signed-off-by: Peter Hutterer (cherry picked from commit 696fdff247453e60e259349d0125f67856361b54) --- src/timer.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/timer.c b/src/timer.c index 4a7b43a8..7a0a8ebf 100644 --- a/src/timer.c +++ b/src/timer.c @@ -133,6 +133,9 @@ libinput_timer_handler(void *data) return; list_for_each_safe(timer, tmp, &libinput->timer.list, link) { + if (timer->expire == 0) + continue; + if (timer->expire <= now) { /* Clear the timer before calling timer_func, as timer_func may re-arm it */