Let pty slave detect closure of last master handle

* 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>
This commit is contained in:
Takashi Yano 2015-03-12 15:48:10 +01:00 committed by Corinna Vinschen
parent a34ebbad28
commit 32fd5b0fe1
No known key found for this signature in database
GPG Key ID: F536069DAE444FA0
2 changed files with 14 additions and 3 deletions

View 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>

View 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))