]> sourceware.org Git - newlib-cygwin.git/commitdiff
Let pty slave detect closure of last master handle
authorTakashi Yano <takashi.yano@nifty.ne.jp>
Thu, 12 Mar 2015 14:48:10 +0000 (15:48 +0100)
committerCorinna Vinschen <corinna@vinschen.de>
Thu, 12 Mar 2015 14:48:10 +0000 (15:48 +0100)
* fhandler_tty.cc (fhandler_pty_master::close): Add code to make slave
detect closure of master. Fix typo in error message.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
winsup/cygwin/ChangeLog
winsup/cygwin/fhandler_tty.cc

index d63b359b41c358f7e9bb8ac313488591289a4168..e1e6a585c796f4b606f785c80f8ada8e64761193 100644 (file)
@@ -1,3 +1,8 @@
+2015-03-12  Takashi Yano  <takashi.yano@nifty.ne.jp>
+
+       * fhandler_tty.cc (fhandler_pty_master::close): Add code to make slave
+       detect closure of master. Fix typo in error message.
+
 2015-03-11  Corinna Vinschen  <corinna@vinschen.de>
 
        * include/cygwin/types.h: Include <sys/_timespec.h>
index c7c90e28db068614046594e9bb0f9ffe611ffabd..87bd6a0aa9b0af43692bc5fe465c2a31b7ef8504 100644 (file)
@@ -1317,17 +1317,23 @@ fhandler_pty_master::close ()
        }
     }
 
+  fhandler_pty_common::close ();
+
+  /* Check if the last master handle has been closed.  If so, set
+     input_available_event to wake up potentially waiting slaves. */
+  if (!PeekNamedPipe (from_master, NULL, 0, NULL, NULL, NULL)
+      && GetLastError () == ERROR_BROKEN_PIPE) 
+    SetEvent (input_available_event);
+
   if (!ForceCloseHandle (from_master))
     termios_printf ("error closing from_master %p, %E", from_master);
   if (!ForceCloseHandle (to_master))
-    termios_printf ("error closing from_master %p, %E", to_master);
+    termios_printf ("error closing to_master %p, %E", to_master);
   from_master = to_master = NULL;
   ForceCloseHandle (echo_r);
   ForceCloseHandle (echo_w);
   echo_r = echo_w = NULL;
 
-  fhandler_pty_common::close ();
-
   if (have_execed || get_ttyp ()->master_pid != myself->pid)
     termios_printf ("not clearing: %d, master_pid %d", have_execed, get_ttyp ()->master_pid);
   if (!ForceCloseHandle (input_available_event))
This page took 0.034017 seconds and 5 git commands to generate.