From 5063c0e1a29078fb72ef5e48e1eeed6a863128ac Mon Sep 17 00:00:00 2001 From: Troels Nielsen Date: Fri, 23 Mar 2012 08:23:14 -0400 Subject: [PATCH] * src/process.c (wait_reading_process_output): Handle pty disconnect by refraining from sending oneself a SIGCHLD. Fixes: debbugs:10933 --- src/ChangeLog | 11 ++++++++--- src/process.c | 19 ++++++++++++------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index e3407a45514..40186c65496 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,8 +1,13 @@ +2012-03-23 Troels Nielsen (tiny change) + + * process.c (wait_reading_process_output): Handle pty disconnect + by refraining from sending oneself a SIGCHLD (bug#10933). + 2012-03-22 Chong Yidong * dispextern.h (struct it): New member string_from_prefix_prop_p. - * xdisp.c (push_prefix_prop): Renamed from push_display_prop. + * xdisp.c (push_prefix_prop): Rename from push_display_prop. Mark string as coming from a prefix property. (handle_face_prop): Use default face for prefix strings (Bug#4281). (pop_it, reseat_1): Save and restore string_from_prefix_prop_p. @@ -14,8 +19,8 @@ 2012-03-20 Eli Zaretskii * w32proc.c (Fw32_set_console_codepage) - (Fw32_set_console_output_codepage, Fw32_get_codepage_charset): Doc - fixes. + (Fw32_set_console_output_codepage, Fw32_get_codepage_charset): + Doc fixes. 2012-03-20 Chong Yidong 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, It can't hurt. */ else if (nread == -1 && errno == EIO) { - /* Clear the descriptor now, so we only raise the signal once. */ - FD_CLR (channel, &input_wait_mask); - FD_CLR (channel, &non_keyboard_wait_mask); - - kill (getpid (), SIGCHLD); + /* Don't do anything if only a pty, with no associated + process (bug#10933). */ + if (XPROCESS (proc)->pid != -2) { + /* Clear the descriptor now, so we only raise the signal + once. */ + FD_CLR (channel, &input_wait_mask); + FD_CLR (channel, &non_keyboard_wait_mask); + + kill (getpid (), SIGCHLD); + } } #endif /* HAVE_PTYS */ - /* If we can detect process termination, don't consider the process - gone just because its pipe is closed. */ + /* If we can detect process termination, don't consider the + process gone just because its pipe is closed. */ #ifdef SIGCHLD else if (nread == 0 && !NETCONN_P (proc) && !SERIALCONN_P (proc)) ; -- 2.39.5