Generate SIGHUP for terminal process group on tty master close
* fhandler_tty.cc (fhandler_pty_slave::write): Move causing of SIGHUP into fhandler_pty_master::close(). (fhandler_pty_slave::read): Ditto. (fhandler_pty_master::close): Ditto. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
4c3946c350
commit
511eb2f264
|
@ -1,3 +1,10 @@
|
|||
2015-06-08 Takashi Yano <takashi.yano@nifty.ne.jp>
|
||||
|
||||
* fhandler_tty.cc (fhandler_pty_slave::write): Move causing of SIGHUP
|
||||
into fhandler_pty_master::close().
|
||||
(fhandler_pty_slave::read): Ditto.
|
||||
(fhandler_pty_master::close): Ditto.
|
||||
|
||||
2015-06-08 Corinna Vinschen <corinna@vinschen.de>
|
||||
|
||||
* include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 4.
|
||||
|
|
|
@ -622,7 +622,6 @@ fhandler_pty_slave::write (const void *ptr, size_t len)
|
|||
default:
|
||||
__seterrno_from_win_error (err);
|
||||
}
|
||||
raise (SIGHUP); /* FIXME: Should this be SIGTTOU? */
|
||||
towrite = -1;
|
||||
}
|
||||
return towrite;
|
||||
|
@ -749,7 +748,12 @@ fhandler_pty_slave::read (void *ptr, size_t& len)
|
|||
goto out;
|
||||
}
|
||||
if (!bytes_available (bytes_in_pipe))
|
||||
raise (SIGHUP);
|
||||
{
|
||||
ReleaseMutex (input_mutex);
|
||||
set_errno (EIO);
|
||||
totalread = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* On first peek determine no. of bytes to flush. */
|
||||
if (!ptr && len == UINT_MAX)
|
||||
|
@ -779,9 +783,10 @@ fhandler_pty_slave::read (void *ptr, size_t& len)
|
|||
if (!ReadFile (get_handle (), buf, readlen, &n, NULL))
|
||||
{
|
||||
termios_printf ("read failed, %E");
|
||||
raise (SIGHUP);
|
||||
bytes_in_pipe = 0;
|
||||
ptr = NULL;
|
||||
ReleaseMutex (input_mutex);
|
||||
set_errno (EIO);
|
||||
totalread = -1;
|
||||
goto out;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -790,7 +795,12 @@ fhandler_pty_slave::read (void *ptr, size_t& len)
|
|||
change after successful read. So we have to peek into the pipe
|
||||
again to see if input is still available */
|
||||
if (!bytes_available (bytes_in_pipe))
|
||||
raise (SIGHUP);
|
||||
{
|
||||
ReleaseMutex (input_mutex);
|
||||
set_errno (EIO);
|
||||
totalread = -1;
|
||||
goto out;
|
||||
}
|
||||
if (n)
|
||||
{
|
||||
len -= n;
|
||||
|
@ -1269,6 +1279,8 @@ fhandler_pty_master::close ()
|
|||
else if (obi.HandleCount == 1)
|
||||
{
|
||||
termios_printf("Closing last master of pty%d", get_minor ());
|
||||
if (get_ttyp ()->getsid () > 0)
|
||||
kill (get_ttyp ()->getsid (), SIGHUP);
|
||||
SetEvent (input_available_event);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue