Subject: Re: bug#19776: 25.0.50; HTML rendering is very slow

From: Eli Zaretskii <[email-masked]>
Date: Sun, 24 Oct 2021 22:24:00 +0300

> From: Lars Ingebrigtsen <[email-masked]>
> Cc: Eli Zaretskii <[email-masked]>,  [email-masked],  [email-masked],
>   [email-masked]
> Date: Sun, 24 Oct 2021 21:10:57 +0200
> 
> I've now implemented this...  but testing this with a busy loop shows
> that the atimer doesn't fire (or at least that the callback doesn't get
> called) in all situations.
> 
> If I move the mouse pointer, for instance, then it's called.  If I don't
> do anything, and eval this:
> 
> (with-delayed-message 0.5 "Yes"
>   (dotimes (i 1000000000)
>     (+ i 2)))
> 
> the atimer callback isn't called.  Anybody know what's up with that?

When the timer expires, it delivers a signal, but the signal handler
only sets a flag.  The flag is checked when we call maybe_quit, which
calls do_pending_atimers.  So a Lisp program that hogs the CPU, and
never calls any function that calls maybe_quit, will indeed block
atimers.  However, this is rare for real-life Lisp programs, because
several core primitives call maybe_quit from time to time.