Fix handling of pending signals in wait_reading_process_output (Bug#8869).
authorChong Yidong <cyd@stupidchicken.com>
Sun, 26 Jun 2011 03:40:40 +0000 (23:40 -0400)
committerChong Yidong <cyd@stupidchicken.com>
Sun, 26 Jun 2011 03:40:40 +0000 (23:40 -0400)
* process.c (wait_reading_process_output): Bypass select if
waiting for a cell while ignoring keyboard input, and input is
pending.  Suggested by Jan Djärv.

src/ChangeLog
src/process.c

index e214121..2c8b22d 100644 (file)
@@ -1,3 +1,9 @@
+2011-06-26  Chong Yidong  <cyd@stupidchicken.com>
+
+       * process.c (wait_reading_process_output): Bypass select if
+       waiting for a cell while ignoring keyboard input, and input is
+       pending.  Suggested by Jan Djärv (Bug#8869).
+
 2011-06-25  Paul Eggert  <eggert@cs.ucla.edu>
 
        Use gnulib's dup2 module instead of rolling our own.
 
 2011-06-22  Jim Meyering  <meyering@redhat.com>
 
-       don't leak an XBM-image-sized buffer
+       Don't leak an XBM-image-sized buffer
        * image.c (xbm_load): Free the image buffer after using it.
 
 2011-06-21  Paul Eggert  <eggert@cs.ucla.edu>
index c46437f..0fe7068 100644 (file)
@@ -4479,13 +4479,19 @@ wait_reading_process_output (int time_limit, int microsecs, int read_kbd,
            set_waiting_for_input (&timeout);
        }
 
+      /* Skip the `select' call if input is available and we're
+        waiting for keyboard input or a cell change (which can be
+        triggered by processing X events).  In the latter case, set
+        nfds to 1 to avoid breaking the loop.  */
       no_avail = 0;
-      if (read_kbd && detect_input_pending ())
+      if ((read_kbd || !NILP (wait_for_cell))
+         && detect_input_pending ())
        {
-         nfds = 0;
+         nfds = read_kbd ? 0 : 1;
          no_avail = 1;
        }
-      else
+
+      if (!no_avail)
        {
 
 #ifdef ADAPTIVE_READ_BUFFERING