]> code.delx.au - gnu-emacs/commitdiff
(in_timer_check): New static var.
authorKim F. Storm <storm@cua.dk>
Fri, 14 May 2004 20:16:06 +0000 (20:16 +0000)
committerKim F. Storm <storm@cua.dk>
Fri, 14 May 2004 20:16:06 +0000 (20:16 +0000)
(timer_check): Use it to guard against reentry.

src/keyboard.c

index b9e455a4431f0c58bb307b43d2ff645b5b405365..a3fae7744317fd0cc43700cb7f37ad786d095e1c 100644 (file)
@@ -4249,6 +4249,8 @@ struct input_event last_timer_event;
    run the timer directly instead of queueing a timer-event.
    Now we always run timers directly.  */
 
+static int in_timer_check = 0;
+
 EMACS_TIME
 timer_check (do_it_now)
      int do_it_now;
@@ -4261,6 +4263,11 @@ timer_check (do_it_now)
   EMACS_SET_SECS (nexttime, -1);
   EMACS_SET_USECS (nexttime, -1);
 
+  if (in_timer_check)
+    return nexttime;
+
+  in_timer_check = 1;
+
   /* Always consider the ordinary timers.  */
   timers = Vtimer_list;
   /* Consider the idle timers only if Emacs is idle.  */
@@ -4419,6 +4426,7 @@ timer_check (do_it_now)
           return the amount of time to wait before it is ripe.  */
        {
          UNGCPRO;
+         in_timer_check = 0;
          return difference;
        }
     }
@@ -4426,6 +4434,7 @@ timer_check (do_it_now)
   /* No timers are pending in the future.  */
   /* Return 0 if we generated an event, and -1 if not.  */
   UNGCPRO;
+  in_timer_check = 0;
   return nexttime;
 }
 \f