From 90ab1a81b966e2ecaaa36d98ecbbfaae837271f5 Mon Sep 17 00:00:00 2001 From: Jim Blandy Date: Wed, 19 May 1993 05:41:37 +0000 Subject: [PATCH] * process.c (wait_reading_process_input): Undo change of April 29th, since that re-introduces the race condition the comments are warning about. Call clear_waiting_for_input before calling status_notify, though. --- src/process.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/process.c b/src/process.c index fe98e4eabe..84a4dbd0c7 100644 --- a/src/process.c +++ b/src/process.c @@ -1747,6 +1747,15 @@ wait_reading_process_input (time_limit, microsecs, read_kbd, do_display) EMACS_SET_SECS_USECS (timeout, 100000, 0); } + /* Cause C-g and alarm signals to take immediate action, + and cause input available signals to zero out timeout. + + It is important that we do this before checking for process + activity. If we get a SIGCHLD after the explicit checks for + process activity, timeout is the only way we will know. */ + if (XINT (read_kbd) < 0) + set_waiting_for_input (&timeout); + /* If status of something has changed, and no input is available, notify the user of the change right away. After this explicit check, we'll let the SIGCHLD handler zap @@ -1756,18 +1765,14 @@ wait_reading_process_input (time_limit, microsecs, read_kbd, do_display) Atemp = input_wait_mask; EMACS_SET_SECS_USECS (timeout, 0, 0); if (select (MAXDESC, &Atemp, 0, 0, &timeout) <= 0) - status_notify (); + { + /* It's okay for us to do this and then continue with + the loop, since timeout has already been zeroed out. */ + clear_waiting_for_input (); + status_notify (); + } } - /* Cause C-g and alarm signals to take immediate action, - and cause input available signals to zero out timeout. - - It is important that we do this before checking for process - activity. If we get a SIGCHLD after the explicit checks for - process activity, timeout is the only way we will know. */ - if (XINT (read_kbd) < 0) - set_waiting_for_input (&timeout); - /* Don't wait for output from a non-running process. */ if (wait_proc != 0 && !NILP (wait_proc->raw_status_low)) update_status (wait_proc); -- 2.20.1