]> sourceware.org Git - newlib-cygwin.git/commitdiff
Cygwin: pty: Fix transferring type-ahead input between input pipes.
authorTakashi Yano <takashi.yano@nifty.ne.jp>
Thu, 1 Jun 2023 10:44:41 +0000 (19:44 +0900)
committerTakashi Yano <takashi.yano@nifty.ne.jp>
Thu, 1 Jun 2023 11:15:21 +0000 (20:15 +0900)
After the commit 595fcb21ffc0, transferring type-ahead input between
the pipe for cygwin app and the pipe for non-cygwin app will not be
done appropriately when the stdin of the non-cygwin app is not pty.
Due to this issue, sometimes the keyboard input might be lost which
should be sent to cygwin app. This patch fixes the issue.

Fixes: 595fcb21ffc0 ("Cygwin: pty: Fix reading CONIN$ when stdin is not a pty.")
Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
winsup/cygwin/fhandler/pty.cc

index aa7ceb0ba4384aca76cef7a54a9f204f26908f1e..9ca3b64b60196f6a20df3762a2f33485bd8e2af0 100644 (file)
@@ -1298,17 +1298,7 @@ fhandler_pty_slave::mask_switch_to_nat_pipe (bool mask, bool xfer)
   else if (InterlockedDecrement (&num_reader) == 0)
     CloseHandle (slave_reading);
 
-  /* This is needed when cygwin-app is started from non-cygwin app if
-     pseudo console is disabled. */
-  bool need_xfer = get_ttyp ()->nat_fg (get_ttyp ()->getpgid ())
-    && get_ttyp ()->switch_to_nat_pipe && !get_ttyp ()->pcon_activated;
-
-  /* In GDB, transfer input based on setpgid() does not work because
-     GDB may not set terminal process group properly. Therefore,
-     transfer input here if isHybrid is set. */
-  bool need_gdb_xfer =
-    isHybrid && GetStdHandle (STD_INPUT_HANDLE) == get_handle ();
-  if (!!masked != mask && xfer && (need_gdb_xfer || need_xfer))
+  if (!!masked != mask && xfer && get_ttyp ()->switch_to_nat_pipe)
     {
       if (mask && get_ttyp ()->pty_input_state_eq (tty::to_nat))
        {
@@ -2240,11 +2230,7 @@ fhandler_pty_master::write (const void *ptr, size_t len)
       if (!get_ttyp ()->pcon_start)
        { /* Pseudo console initialization has been done in above code. */
          pinfo pp (get_ttyp ()->pcon_start_pid);
-         bool pcon_fg = (pp && get_ttyp ()->getpgid () == pp->pgid);
-         /* GDB may set WINPID rather than cygwin PID to process group
-            when the debugged process is a non-cygwin process.*/
-         pcon_fg |= !pinfo (get_ttyp ()->getpgid ());
-         if (get_ttyp ()->switch_to_nat_pipe && pcon_fg
+         if (get_ttyp ()->switch_to_nat_pipe
              && get_ttyp ()->pty_input_state_eq (tty::to_cyg))
            {
              /* This accept_input() call is needed in order to transfer input
@@ -4142,7 +4128,7 @@ fhandler_pty_slave::cleanup_for_non_cygwin_app (handle_set_t *p, tty *ttyp,
                                                DWORD force_switch_to)
 {
   ttyp->wait_fwd ();
-  if (ttyp->getpgid () == myself->pgid && stdin_is_ptys
+  if ((ttyp->pcon_activated || stdin_is_ptys)
       && ttyp->pty_input_state_eq (tty::to_nat))
     {
       WaitForSingleObject (p->input_mutex, mutex_timeout);
This page took 0.037851 seconds and 5 git commands to generate.