diff options
| author | Jim Blandy | 1993-05-19 05:41:37 +0000 |
|---|---|---|
| committer | Jim Blandy | 1993-05-19 05:41:37 +0000 |
| commit | 90ab1a81b966e2ecaaa36d98ecbbfaae837271f5 (patch) | |
| tree | 24b61322205d905cf3ba59f8c595c7243e2dc5a5 /src | |
| parent | 9aa2a7f43e7470a16689925925a6b5903ba6f438 (diff) | |
| download | emacs-90ab1a81b966e2ecaaa36d98ecbbfaae837271f5.tar.gz emacs-90ab1a81b966e2ecaaa36d98ecbbfaae837271f5.zip | |
* 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')
| -rw-r--r-- | src/process.c | 25 |
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) | |||
| 1747 | EMACS_SET_SECS_USECS (timeout, 100000, 0); | 1747 | EMACS_SET_SECS_USECS (timeout, 100000, 0); |
| 1748 | } | 1748 | } |
| 1749 | 1749 | ||
| 1750 | /* Cause C-g and alarm signals to take immediate action, | ||
| 1751 | and cause input available signals to zero out timeout. | ||
| 1752 | |||
| 1753 | It is important that we do this before checking for process | ||
| 1754 | activity. If we get a SIGCHLD after the explicit checks for | ||
| 1755 | process activity, timeout is the only way we will know. */ | ||
| 1756 | if (XINT (read_kbd) < 0) | ||
| 1757 | set_waiting_for_input (&timeout); | ||
| 1758 | |||
| 1750 | /* If status of something has changed, and no input is | 1759 | /* If status of something has changed, and no input is |
| 1751 | available, notify the user of the change right away. After | 1760 | available, notify the user of the change right away. After |
| 1752 | this explicit check, we'll let the SIGCHLD handler zap | 1761 | 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) | |||
| 1756 | Atemp = input_wait_mask; | 1765 | Atemp = input_wait_mask; |
| 1757 | EMACS_SET_SECS_USECS (timeout, 0, 0); | 1766 | EMACS_SET_SECS_USECS (timeout, 0, 0); |
| 1758 | if (select (MAXDESC, &Atemp, 0, 0, &timeout) <= 0) | 1767 | if (select (MAXDESC, &Atemp, 0, 0, &timeout) <= 0) |
| 1759 | status_notify (); | 1768 | { |
| 1769 | /* It's okay for us to do this and then continue with | ||
| 1770 | the loop, since timeout has already been zeroed out. */ | ||
| 1771 | clear_waiting_for_input (); | ||
| 1772 | status_notify (); | ||
| 1773 | } | ||
| 1760 | } | 1774 | } |
| 1761 | 1775 | ||
| 1762 | /* Cause C-g and alarm signals to take immediate action, | ||
| 1763 | and cause input available signals to zero out timeout. | ||
| 1764 | |||
| 1765 | It is important that we do this before checking for process | ||
| 1766 | activity. If we get a SIGCHLD after the explicit checks for | ||
| 1767 | process activity, timeout is the only way we will know. */ | ||
| 1768 | if (XINT (read_kbd) < 0) | ||
| 1769 | set_waiting_for_input (&timeout); | ||
| 1770 | |||
| 1771 | /* Don't wait for output from a non-running process. */ | 1776 | /* Don't wait for output from a non-running process. */ |
| 1772 | if (wait_proc != 0 && !NILP (wait_proc->raw_status_low)) | 1777 | if (wait_proc != 0 && !NILP (wait_proc->raw_status_low)) |
| 1773 | update_status (wait_proc); | 1778 | update_status (wait_proc); |