Commit 90ab1a81 authored by Jim Blandy's avatar Jim Blandy

* 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.
parent 9aa2a7f4
......@@ -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);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment