summaryrefslogtreecommitdiff
path: root/src/process.c
diff options
context:
space:
mode:
authorJim Blandy <jimb@redhat.com>1993-05-19 05:41:37 +0000
committerJim Blandy <jimb@redhat.com>1993-05-19 05:41:37 +0000
commit90ab1a81b966e2ecaaa36d98ecbbfaae837271f5 (patch)
tree24b61322205d905cf3ba59f8c595c7243e2dc5a5 /src/process.c
parent9aa2a7f43e7470a16689925925a6b5903ba6f438 (diff)
downloademacs-90ab1a81b966e2ecaaa36d98ecbbfaae837271f5.tar.gz
* 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.
Diffstat (limited to 'src/process.c')
-rw-r--r--src/process.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/src/process.c b/src/process.c
index fe98e4eabe9..84a4dbd0c7e 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);