* src/process.c (wait_reading_process_output): Handle pty disconnect

by refraining from sending oneself a SIGCHLD.

Fixes: debbugs:10933
This commit is contained in:
Troels Nielsen 2012-03-23 08:23:14 -04:00 committed by Stefan Monnier
parent 005a89ffd3
commit 5063c0e1a2
2 changed files with 20 additions and 10 deletions

View file

@ -1,8 +1,13 @@
2012-03-23 Troels Nielsen <bn.troels@gmail.com> (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 <cyd@gnu.org>
* 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 <eliz@gnu.org>
* 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 <cyd@gnu.org>

View file

@ -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))
;