aboutsummaryrefslogtreecommitdiffstats
path: root/src/process.c
diff options
context:
space:
mode:
authorJim Blandy1993-05-19 05:41:37 +0000
committerJim Blandy1993-05-19 05:41:37 +0000
commit90ab1a81b966e2ecaaa36d98ecbbfaae837271f5 (patch)
tree24b61322205d905cf3ba59f8c595c7243e2dc5a5 /src/process.c
parent9aa2a7f43e7470a16689925925a6b5903ba6f438 (diff)
downloademacs-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/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)
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);