From 38f9d9bf060e08f3fe5edab9a13bc7eaabe7e2f1 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Tue, 9 Aug 2022 21:26:21 +0300 Subject: [PATCH] ; * src/keyboard.c (timer_check_2): Restore run-time conditions. --- src/keyboard.c | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/keyboard.c b/src/keyboard.c index f8e6ef748da..4ad6e4e6bd1 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -4645,24 +4645,29 @@ timer_check_2 (Lisp_Object timers, Lisp_Object idle_timers) /* If we got here, presumably `decode_timer` has checked that this timer has not yet been triggered. */ eassert (NILP (AREF (chosen_timer, 0))); - specpdl_ref count = SPECPDL_INDEX (); - Lisp_Object old_deactivate_mark = Vdeactivate_mark; + /* In a production build, where assertions compile to + nothing, we still want to play it safe here. */ + if (NILP (AREF (chosen_timer, 0))) + { + specpdl_ref count = SPECPDL_INDEX (); + Lisp_Object old_deactivate_mark = Vdeactivate_mark; - /* Mark the timer as triggered to prevent problems if the lisp - code fails to reschedule it right. */ - ASET (chosen_timer, 0, Qt); + /* Mark the timer as triggered to prevent problems if the lisp + code fails to reschedule it right. */ + ASET (chosen_timer, 0, Qt); - specbind (Qinhibit_quit, Qt); + specbind (Qinhibit_quit, Qt); - call1 (Qtimer_event_handler, chosen_timer); - Vdeactivate_mark = old_deactivate_mark; - timers_run++; - unbind_to (count, Qnil); + call1 (Qtimer_event_handler, chosen_timer); + Vdeactivate_mark = old_deactivate_mark; + timers_run++; + unbind_to (count, Qnil); - /* Since we have handled the event, - we don't need to tell the caller to wake up and do it. */ - /* But the caller must still wait for the next timer, so - return 0 to indicate that. */ + /* Since we have handled the event, + we don't need to tell the caller to wake up and do it. */ + /* But the caller must still wait for the next timer, so + return 0 to indicate that. */ + } nexttime = make_timespec (0, 0); break; -- 2.39.2