The commit bb7a39ac13731a80fc2d80487f9da760dd34c3ba introduced this regression.
The execution of timer callbacks in CheckAllTimes may (and does e.g. with synaptics) result in the timers being rescheduled or new timers being set. The TimerSet function uses current "now" value though. Therefore, subtracting the old "new" from the new timer's "expires" results in a higher value than "delta" + 250. As a result, the function CheckAllTimers never gets out of the goto loop.
I'm attaching a proposed fix.
Created attachment 9145 [details] [review]
A forgot to mention that it's nearly 100% reproducible with the synaptics driver which uses a periodic timer.
Fixed in git master, and added to the 1.3 tracking page on the wiki. Thanks!