Subject: 27.0.50; Timers repeated after waking from suspend

From: Stefan Monnier <[email-masked]>
Date: Tue, 23 Apr 2019 12:59:42 -0400

Package: Emacs
Version: 27.0.50

If Emacs is prevented from running for a "long" time (via the `STOP`
signal, C-z, suspend-to-ram, thrashing, you name it), the "missed"
repetitions of timer events all get run when we wake up.

E.g. you can try the following:

    % emacs -Q
    (run-with-timer 5 5 (lambda () (message "Run at: %s" (format-time-string "%H:%M:%S"))))
    C-j
    C-x b *Messages* RET
    
you should see a message emitted every 5 seconds.  Then do:

    kill -STOP <emacs-pid>
    
now wait a minute and then

    kill -CONT <emacs-pid>

and you should see something like:

    Run at: 12:49:40 [7 times]

in the *Messages* buffer, before all the repetitions that couldn't be
run while Emacs was suspended are run when we wake up.

Apparently this is *not* a new behavior (I can reproduce it with
Debian's 26.1) although I only recently started noticing it.

If we decide to consider this a feature (I guess there can be
circumstances where it might make sense, tho I'm not sure those would
really work well with the way we handle timers), I think we should
provide some way for users of timers to indicate whether they want to
use this feature or not (and I think it makes sense to default to not
using this feature).

        Stefan

In GNU Emacs 27.0.50 (build 1, x86_64-unknown-linux-gnu, GTK+ Version 3.24.5)
 of 2019-04-14 built on alfajor
Repository revision: bd7668ee53b3597ee229afd83e18b6cdb6315056
Repository branch: work
Windowing system distributor 'The X.Org Foundation', version 11.0.12003000
System Description: Debian GNU/Linux buster/sid

Recent messages:
Mark set
Mark activated
Mark set
Auto-saving...done
Saving file /home/monnier/src/emacs/elpa/packages/smalltalk-mode/smalltalk-mode.el...
Wrote /home/monnier/src/emacs/elpa/packages/smalltalk-mode/smalltalk-mode.el
Saving file /home/monnier/share/etc/diary...
Wrote /home/monnier/share/etc/diary
Marking diary entries...done
(New file)