aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/process.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/process.c b/src/process.c
index 14535eb6e1e..f012b2c058d 100644
--- a/src/process.c
+++ b/src/process.c
@@ -4817,8 +4817,8 @@ wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
4817 subprocess termination and SIGCHLD. */ 4817 subprocess termination and SIGCHLD. */
4818 else if (nread == 0 && !NETCONN_P (proc)) 4818 else if (nread == 0 && !NETCONN_P (proc))
4819 ; 4819 ;
4820#endif /* O_NDELAY */ 4820#endif /* O_NDELAY */
4821#endif /* O_NONBLOCK */ 4821#endif /* O_NONBLOCK */
4822#ifdef HAVE_PTYS 4822#ifdef HAVE_PTYS
4823 /* On some OSs with ptys, when the process on one end of 4823 /* On some OSs with ptys, when the process on one end of
4824 a pty exits, the other end gets an error reading with 4824 a pty exits, the other end gets an error reading with
@@ -4829,11 +4829,17 @@ wait_reading_process_output (time_limit, microsecs, read_kbd, do_display,
4829 get a SIGCHLD). 4829 get a SIGCHLD).
4830 4830
4831 However, it has been known to happen that the SIGCHLD 4831 However, it has been known to happen that the SIGCHLD
4832 got lost. So raise the signl again just in case. 4832 got lost. So raise the signal again just in case.
4833 It can't hurt. */ 4833 It can't hurt. */
4834 else if (nread == -1 && errno == EIO) 4834 else if (nread == -1 && errno == EIO)
4835 kill (getpid (), SIGCHLD); 4835 {
4836#endif /* HAVE_PTYS */ 4836 /* Clear the descriptor now, so we only raise the signal once. */
4837 FD_CLR (channel, &input_wait_mask);
4838 FD_CLR (channel, &non_keyboard_wait_mask);
4839
4840 kill (getpid (), SIGCHLD);
4841 }
4842#endif /* HAVE_PTYS */
4837 /* If we can detect process termination, don't consider the process 4843 /* If we can detect process termination, don't consider the process
4838 gone just because its pipe is closed. */ 4844 gone just because its pipe is closed. */
4839#ifdef SIGCHLD 4845#ifdef SIGCHLD
@@ -6514,11 +6520,6 @@ sigchld_handler (signo)
6514 /* Keep trying to get a status until we get a definitive result. */ 6520 /* Keep trying to get a status until we get a definitive result. */
6515 do 6521 do
6516 { 6522 {
6517 /* For some reason, this sleep() prevents Emacs from sending
6518 loadavg to 5-8(!) for ~10 seconds.
6519 See http://thread.gmane.org/gmane.emacs.devel/67722 or
6520 http://www.google.com/search?q=busyloop+in+sigchld_handler */
6521 usleep (1000);
6522 errno = 0; 6523 errno = 0;
6523 pid = wait3 (&w, WNOHANG | WUNTRACED, 0); 6524 pid = wait3 (&w, WNOHANG | WUNTRACED, 0);
6524 } 6525 }