Mercurial > emacs
comparison src/process.c @ 2894:646c5beae647
* 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.
author | Jim Blandy <jimb@redhat.com> |
---|---|
date | Wed, 19 May 1993 05:41:37 +0000 |
parents | 4df57953d5d0 |
children | 725698689fbd |
comparison
equal
deleted
inserted
replaced
2893:4df57953d5d0 | 2894:646c5beae647 |
---|---|
1745 else | 1745 else |
1746 { | 1746 { |
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 |
1753 timeout to get our attention. */ | 1762 timeout to get our attention. */ |
1754 if (update_tick != process_tick && do_display) | 1763 if (update_tick != process_tick && do_display) |
1755 { | 1764 { |
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 | |
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 | 1775 |
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); |
1774 if (wait_proc != 0 | 1779 if (wait_proc != 0 |