]> sourceware.org Git - newlib-cygwin.git/commitdiff
Generate SIGHUP for terminal process group on tty master close
authorTakashi Yano <takashi.yano@nifty.ne.jp>
Mon, 8 Jun 2015 12:07:42 +0000 (14:07 +0200)
committerCorinna Vinschen <corinna@vinschen.de>
Mon, 8 Jun 2015 12:07:42 +0000 (14:07 +0200)
* 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>
winsup/cygwin/ChangeLog
winsup/cygwin/fhandler_tty.cc

index 4a663afed7e59c1f056f2efc477d1a3cc9c3f238..894094caa900a14dab2107be9f50a20c1f6a1591 100644 (file)
@@ -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.
index 1b5c18bc7010e890a3bec02f3baa051b1b6e1241..f22998f9f6cda1e23da856816045f9c523565c39 100644 (file)
@@ -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);
     }
 
This page took 0.03905 seconds and 5 git commands to generate.