* lisp/emacs-lisp/timer.el (timer-event-handler): Don't retrigger a canceled
authorStefan Monnier <monnier@iro.umontreal.ca>
Mon, 8 Apr 2013 02:08:45 +0000 (22:08 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Mon, 8 Apr 2013 02:08:45 +0000 (22:08 -0400)
timer.

Fixes: debbugs:14156

lisp/ChangeLog
lisp/emacs-lisp/timer.el

index a2be105..f5cf9d0 100644 (file)
@@ -1,3 +1,8 @@
+2013-04-08  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * emacs-lisp/timer.el (timer-event-handler): Don't retrigger a canceled
+       timer (bug#14156).
+
 2013-04-07  Nic Ferrier  <nferrier@ferrier.me.uk>
 
        * emacs-lisp/ert.el (should, should-not, should-error): Add edebug
index 8b019d0..8b1dca8 100644 (file)
@@ -314,8 +314,12 @@ This function is called, by name, directly by the C code."
               (save-current-buffer
                 (apply (timer--function timer) (timer--args timer)))
            (error (message "Error in timer: %S" err)))
-         (if retrigger
-             (setf (timer--triggered timer) nil)))
+         (when (and retrigger
+                     ;; If the timer's been canceled, don't "retrigger" it
+                     ;; since it might still be in the copy of timer-list kept
+                     ;; by keyboard.c:timer_check (bug#14156).
+                     (memq timer timer-list))
+            (setf (timer--triggered timer) nil)))
       (error "Bogus timer event"))))
 
 ;; This function is incompatible with the one in levents.el.