[PATCH] Cygwin: pty: Do not transfer input to nat-pipe while masked
Takashi Yano <[email protected]> Tue, 30 Jun 2026 14:22:52 +0900
| Newsgroups | gmane.os.cygwin.patches |
|---|---|
| Message-ID | <[email protected]> |
On the command "cat | non-cygwin-app", `cat` sometimes fails to read
key input. This happens when `cat` starts to read input before `non-
cygwin-app` configures pseudo console. This is because pipe state is
switched to nat-pipe when pseudo console is configured.
This patch prevent the pipe state from changing to nat-pipe state if
some cygwin process is reading input from the cyg-pipe.
Fixes: f20641789427 ("Cygwin: pty: Reduce unecessary input transfer.")
Signed-off-by: Takashi Yano <[email protected]>
Reviewed-by:
---
winsup/cygwin/fhandler/pty.cc | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/winsup/cygwin/fhandler/pty.cc b/winsup/cygwin/fhandler/pty.cc
index 35e320507..b9e25519d 100644
--- a/winsup/cygwin/fhandler/pty.cc
+++ b/winsup/cygwin/fhandler/pty.cc
@@ -4401,6 +4401,18 @@ fhandler_pty_slave::transfer_input (tty::xfer_dir dir, HANDLE from, tty *ttyp,
HANDLE input_available_event,
HANDLE input_transferred_to_cyg)
{
+ if (dir == tty::to_nat)
+ {
+ char name[MAX_PATH];
+ shared_name (name, TTY_SLAVE_READING, ttyp->get_minor ());
+ HANDLE masked = OpenEvent (READ_CONTROL, FALSE, name);
+ CloseHandle (masked);
+ if (masked)
+ /* Cygwin process is reading cyg-pipe.
+ Do not transfer input to nat-pipe. */
+ return;
+ }
+
HANDLE to;
if (dir == tty::to_nat)
to = ttyp->to_slave_nat ();
--
2.51.0