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:
parent
a34ebbad28
commit
32fd5b0fe1
@ -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>
|
2015-03-11 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* include/cygwin/types.h: Include <sys/_timespec.h>
|
* include/cygwin/types.h: Include <sys/_timespec.h>
|
||||||
|
@ -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))
|
if (!ForceCloseHandle (from_master))
|
||||||
termios_printf ("error closing from_master %p, %E", from_master);
|
termios_printf ("error closing from_master %p, %E", from_master);
|
||||||
if (!ForceCloseHandle (to_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;
|
from_master = to_master = NULL;
|
||||||
ForceCloseHandle (echo_r);
|
ForceCloseHandle (echo_r);
|
||||||
ForceCloseHandle (echo_w);
|
ForceCloseHandle (echo_w);
|
||||||
echo_r = echo_w = NULL;
|
echo_r = echo_w = NULL;
|
||||||
|
|
||||||
fhandler_pty_common::close ();
|
|
||||||
|
|
||||||
if (have_execed || get_ttyp ()->master_pid != myself->pid)
|
if (have_execed || get_ttyp ()->master_pid != myself->pid)
|
||||||
termios_printf ("not clearing: %d, master_pid %d", have_execed, get_ttyp ()->master_pid);
|
termios_printf ("not clearing: %d, master_pid %d", have_execed, get_ttyp ()->master_pid);
|
||||||
if (!ForceCloseHandle (input_available_event))
|
if (!ForceCloseHandle (input_available_event))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user