I'm thinking I should augment the patch so as the observable behavior of (sit-for 0) doesn't change. It would no longer run timers if only input-pending-p changes as described. Currently: (defun sit-for (seconds &optional nodisp obsolete) [...] (cond [...] ((input-pending-p) nil) ((<= seconds 0) (or nodisp (redisplay))) [...] I considered whether (<= seconds 0) could fall through to the t case instead. The read_char function has a complex implementation, so it's not clear doing so wouldn't change behavior. Is there another Lisp function that does timer_check and little else, which the (<= seconds 0) case could call? Should I write a new subr for it? Looking ahead to the concurrency branch, should (sit-for 0 t) and (thread-yield) have different behaviors? Or perhaps the former calls the latter? I don't see thread-yield checking for timers to run, should it? (And it didn't look like timers were split out into their own threads on the concurrency branch.)