mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-31 17:30:54 -08:00
* 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.
This commit is contained in:
parent
9aa2a7f43e
commit
90ab1a81b9
1 changed files with 15 additions and 10 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue