diff lisp/prim/itimer.el @ 126:1370575f1259 xemacs-20-1p1

Import from CVS: tag xemacs-20-1p1
author cvs
date Mon, 13 Aug 2007 09:27:39 +0200
parents 8619ce7e4c50
children 318232e2a3f0
line wrap: on
line diff
--- a/lisp/prim/itimer.el	Mon Aug 13 09:26:41 2007 +0200
+++ b/lisp/prim/itimer.el	Mon Aug 13 09:27:39 2007 +0200
@@ -46,7 +46,7 @@
 ;;
 ;; See the doc strings of these functions for more information.
 
-(defvar itimer-version "1.05"
+(defvar itimer-version "1.06"
   "Version number of the itimer package.")
 
 (defvar itimer-list nil
@@ -96,6 +96,8 @@
   (define-key itimer-edit-map "x" 'start-itimer)
   (define-key itimer-edit-map "?" 'itimer-edit-help))
   
+(defvar itimer-inside-driver nil)
+
 (defvar itimer-edit-start-marker nil)
 
 ;; macros must come first... or byte-compile'd code will throw back its
@@ -803,7 +805,7 @@
 	  ((fboundp 'cancel-timer)
 	   (cancel-timer itimer-timer)))
     (setq itimer-timer (add-timeout itimer-short-interval
-				    'itimer-timer-driver nil nil))))
+				    'itimer-timer-driver nil 5))))
 
 (defun itimer-time-difference (t1 t2)
   (let (usecs secs 65536-secs carry)
@@ -830,16 +832,17 @@
   ;; system stops working.  itimer-run-expired-timers allows
   ;; individual timer function to be aborted, so the user can
   ;; escape a feral timer function.
-  (let* ((inhibit-quit t)
-	 (now (current-time))
-	 (elapsed (itimer-time-difference now itimer-timer-last-wakeup))
-	 (sleep nil))
-    (setq itimer-timer-last-wakeup now)
-    (unwind-protect
-	(setq sleep (itimer-run-expired-timers elapsed))
-      (and (null sleep) (add-timeout 1 'itimer-timer-driver nil nil)))
-    (setq itimer-next-wakeup sleep
-	  itimer-timer (add-timeout sleep 'itimer-timer-driver nil nil))))
+  (if (not itimer-inside-driver)
+      (let* ((inhibit-quit t)
+	     (itimer-inside-driver t)
+	     (now (current-time))
+	     (elapsed (itimer-time-difference now itimer-timer-last-wakeup))
+	     (sleep nil))
+	(setq itimer-timer-last-wakeup now
+	      sleep (itimer-run-expired-timers elapsed))
+	(disable-timeout itimer-timer)
+	(setq itimer-next-wakeup sleep
+	      itimer-timer (add-timeout sleep 'itimer-timer-driver nil 5)))))
 
 (defun itimer-driver-start ()
   (if (fboundp 'add-timeout)