changeset 14458:2bb4652305c1

(wait_reading_process_input): If select times out, return only if we had no timers to shorten the wait. Don't shorten the wait for timers if time_limit is -1.
author Richard M. Stallman <rms@gnu.org>
date Thu, 01 Feb 1996 20:35:59 +0000
parents faef0869994d
children c1d25453a95f
files src/process.c
diffstat 1 files changed, 11 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/process.c	Thu Feb 01 18:44:05 1996 +0000
+++ b/src/process.c	Thu Feb 01 20:35:59 1996 +0000
@@ -2026,6 +2026,8 @@
 
   while (1)
     {
+      int timeout_reduced_for_timers = 0;
+
       /* If calling from keyboard input, do not quit
 	 since we want to return C-g as an input character.
 	 Otherwise, do pending quit if requested.  */
@@ -2064,13 +2066,17 @@
 	 call timer_delay on their own.)  */
       if (read_kbd >= 0)
 	{
-	  EMACS_TIME timer_delay = timer_check (1);
-	  if (! EMACS_TIME_NEG_P (timer_delay))
+	  EMACS_TIME timer_delay;
+	  timer_delay = timer_check (1);
+	  if (! EMACS_TIME_NEG_P (timer_delay) && time_limit != -1)
 	    {
 	      EMACS_TIME difference;
 	      EMACS_SUB_TIME (difference, timer_delay, timeout);
 	      if (EMACS_TIME_NEG_P (difference))
-		timeout = timer_delay;
+		{
+		  timeout = timer_delay;
+		  timeout_reduced_for_timers = 1;
+		}
 	    }
 	}
 
@@ -2149,7 +2155,8 @@
       /*  If we woke up due to SIGWINCH, actually change size now.  */
       do_pending_window_change ();
 
-      if (time_limit && nfds == 0) /* timeout elapsed */
+      if (time_limit && nfds == 0 && ! timeout_reduced_for_timers)
+	/* We wanted the full specified time, so return now.  */
 	break;
       if (nfds < 0)
 	{