GNU bug report logs - #17392
24.3.90; cursor blinks faster and faster

Previous Next

Package: emacs;

Reported by: michael_heerdegen <at> web.de

Date: Sat, 3 May 2014 01:45:02 UTC

Severity: normal

Found in version 24.3.90

Done: Stefan Monnier <monnier <at> IRO.UMontreal.CA>

Bug is archived. No further changes may be made.

Full log


Message #68 received at 17392 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Michael Heerdegen <michael_heerdegen <at> web.de>
Cc: 17392 <at> debbugs.gnu.org, monnier <at> iro.umontreal.ca
Subject: Re: bug#17392: 24.3.90; cursor blinks faster and faster
Date: Sat, 10 May 2014 14:06:38 +0300
> From: Michael Heerdegen <michael_heerdegen <at> web.de>
> Date: Sat, 10 May 2014 12:34:09 +0200
> Cc: 17392 <at> debbugs.gnu.org
> 
> In emacs -Q, I did
> 
> --8<---------------cut here---------------start------------->8---
> (progn
>   (advice-add 'timer-event-handler :before
>               (lambda (timer)
>                 (unless (or (memq timer timer-list)
>                             (memq timer timer-idle-list))
>                   (message "This should not happen"))))
>   (defun provoke (&rest _)
>     (run-with-idle-timer .001 nil
>                          (lambda () (sit-for 2.))))
>   (defadvice handle-switch-frame (after provoke activate)
>     (provoke)))
> --8<---------------cut here---------------end--------------->8---
> 
> After switching frames a bit, I get "This should not happen".  So an
> idle blinking timer not in timer-idle-list is called from C with
> timer-event-handler.  At this point, there is already another blinking
> timer in timer-idle-list.  timer-event-handler pushes the zombie timer
> to timer-idle-list as well, so then we have two of them there etc.

See how timers are run by keyboard.c: we first make a copy of the
timers' list, and then work on that copy.  The comment there says:

  /* We use copies of the timers' lists to allow a timer to add itself
     again, without locking up Emacs if the newly added timer is
     already ripe when added.  */

Can this implementation detail explain what you see?

Btw, I don't understand what you say here, it sounds a contradiction:

> So an idle blinking timer not in timer-idle-list is called from C
> with timer-event-handler.  At this point, there is already another
> blinking timer in timer-idle-list.

So is there a blinking time in timer-idle-list, or isn't there?  The
first sentence seems to say there isn't, but then the next sentence
says there is.




This bug report was last modified 11 years and 61 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.