aboutsummaryrefslogtreecommitdiffstats
path: root/src/process.c
diff options
context:
space:
mode:
authorTroels Nielsen2012-03-23 08:23:14 -0400
committerStefan Monnier2012-03-23 08:23:14 -0400
commit5063c0e1a29078fb72ef5e48e1eeed6a863128ac (patch)
tree6895409e31f91197c4ef98bfef09fa4e30694a76 /src/process.c
parent005a89ffd3550983ca3c85334d79c7fad633c9c0 (diff)
downloademacs-5063c0e1a29078fb72ef5e48e1eeed6a863128ac.tar.gz
emacs-5063c0e1a29078fb72ef5e48e1eeed6a863128ac.zip
* src/process.c (wait_reading_process_output): Handle pty disconnect
by refraining from sending oneself a SIGCHLD. Fixes: debbugs:10933
Diffstat (limited to 'src/process.c')
-rw-r--r--src/process.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/process.c b/src/process.c
index bdf16b7dbd2..f2f33a9eafc 100644
--- a/src/process.c
+++ b/src/process.c
@@ -4888,15 +4888,20 @@ wait_reading_process_output (int time_limit, int microsecs, int read_kbd,
4888 It can't hurt. */ 4888 It can't hurt. */
4889 else if (nread == -1 && errno == EIO) 4889 else if (nread == -1 && errno == EIO)
4890 { 4890 {
4891 /* Clear the descriptor now, so we only raise the signal once. */ 4891 /* Don't do anything if only a pty, with no associated
4892 FD_CLR (channel, &input_wait_mask); 4892 process (bug#10933). */
4893 FD_CLR (channel, &non_keyboard_wait_mask); 4893 if (XPROCESS (proc)->pid != -2) {
4894 4894 /* Clear the descriptor now, so we only raise the signal
4895 kill (getpid (), SIGCHLD); 4895 once. */
4896 FD_CLR (channel, &input_wait_mask);
4897 FD_CLR (channel, &non_keyboard_wait_mask);
4898
4899 kill (getpid (), SIGCHLD);
4900 }
4896 } 4901 }
4897#endif /* HAVE_PTYS */ 4902#endif /* HAVE_PTYS */
4898 /* If we can detect process termination, don't consider the process 4903 /* If we can detect process termination, don't consider the
4899 gone just because its pipe is closed. */ 4904 process gone just because its pipe is closed. */
4900#ifdef SIGCHLD 4905#ifdef SIGCHLD
4901 else if (nread == 0 && !NETCONN_P (proc) && !SERIALCONN_P (proc)) 4906 else if (nread == 0 && !NETCONN_P (proc) && !SERIALCONN_P (proc))
4902 ; 4907 ;