summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTroels Nielsen <bn.troels@gmail.com>2012-03-23 08:23:14 -0400
committerStefan Monnier <monnier@iro.umontreal.ca>2012-03-23 08:23:14 -0400
commit5063c0e1a29078fb72ef5e48e1eeed6a863128ac (patch)
tree6895409e31f91197c4ef98bfef09fa4e30694a76
parent005a89ffd3550983ca3c85334d79c7fad633c9c0 (diff)
downloademacs-5063c0e1a29078fb72ef5e48e1eeed6a863128ac.tar.gz
* src/process.c (wait_reading_process_output): Handle pty disconnect
by refraining from sending oneself a SIGCHLD. Fixes: debbugs:10933
-rw-r--r--src/ChangeLog11
-rw-r--r--src/process.c19
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 <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>
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))
;