changeset 72277:a6b9ee835f88

* process.c: Reapply 2006-08-01 change.
author Chong Yidong <cyd@stupidchicken.com>
date Sat, 05 Aug 2006 01:38:42 +0000
parents b3b5d904f956
children b58fd5b4473a
files src/process.c
diffstat 1 files changed, 12 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/process.c	Sat Aug 05 01:38:21 2006 +0000
+++ b/src/process.c	Sat Aug 05 01:38:42 2006 +0000
@@ -4158,6 +4158,14 @@
    when not inside wait_reading_process_output.  */
 static int waiting_for_user_input_p;
 
+static Lisp_Object
+wait_reading_process_output_unwind (data)
+     Lisp_Object data;
+{
+  waiting_for_user_input_p = XINT (data);
+  return Qnil;
+}
+
 /* This is here so breakpoints can be put on it.  */
 static void
 wait_reading_process_output_1 ()
@@ -4240,11 +4248,7 @@
   EMACS_TIME timeout, end_time;
   int wait_channel = -1;
   int got_some_input = 0;
-  /* We can't record_unwind_protect here because after the
-     set_waiting_for_input call, C-g (interrupt_signal) would run
-     throw_to_read_char instead of Fsignal, which means unbind_to
-     doesn't get called.  */
-  int saved_waiting_for_user_input_p = waiting_for_user_input_p;
+  int count = SPECPDL_INDEX ();
 
   FD_ZERO (&Available);
 #ifdef NON_BLOCKING_CONNECT
@@ -4255,6 +4259,8 @@
   if (wait_proc != NULL)
     wait_channel = XINT (wait_proc->infd);
 
+  record_unwind_protect (wait_reading_process_output_unwind,
+			 make_number (waiting_for_user_input_p));
   waiting_for_user_input_p = read_kbd;
 
   /* Since we may need to wait several times,
@@ -4881,7 +4887,7 @@
 	}			/* end for each file descriptor */
     }				/* end while exit conditions not met */
 
-  waiting_for_user_input_p = saved_waiting_for_user_input_p;
+  unbind_to (count, Qnil);
 
   /* If calling from keyboard input, do not quit
      since we want to return C-g as an input character.