Re: [PATCH v2 2/3] Cygwin: pty: Discard pcon input buffer when discard_input is called.

Takashi Yano <[email protected]> Tue, 23 Jun 2026 22:51:46 +0900
Newsgroups gmane.os.cygwin.patches
Message-ID <[email protected]>
Hi Mark,

On Tue, 23 Jun 2026 00:50:43 -0700
Mark Geisert wrote:
> Hi Takashi,
> 
> On 6/13/2026 7:09 AM, Takashi Yano wrote:
> > Previously, the process on pty could not be a child of non-cygwin
> > process. So, it is not necessary to flush pcon input buffer even
>             ^^^^ replace "So" with "In that case"
> 
> > when discard_input() is called. However, now, the child process
> > of non-cygwin app on pseudo console is running on pty. So,
> > discard_input() should affect to the pcon input buffer as well.
> > 
> > This prevents the probelm:
>                      ^^^^^^^
> >    1) Run 'sleep 10' in cmd.exe
> >    2) Enter 'ps\n' while sleeping
> >    3) Press Ctrl-C
> >    4) 'ps' will be executed after terminating 'sleep' by Ctrl-C.
> > 
> > Signed-off-by: Takashi Yano <[email protected]>
> > Reviwed-by:
> > ---
> >   winsup/cygwin/fhandler/pty.cc | 11 ++++++++++-
> >   1 file changed, 10 insertions(+), 1 deletion(-)
> > 
> > diff --git a/winsup/cygwin/fhandler/pty.cc b/winsup/cygwin/fhandler/pty.cc
> > index d625ff9df..b3a8d57cc 100644
> > --- a/winsup/cygwin/fhandler/pty.cc
> > +++ b/winsup/cygwin/fhandler/pty.cc
> > @@ -583,6 +583,14 @@ fhandler_pty_master::discard_input ()
> >     if (!get_ttyp ()->pcon_activated)
> >       while (::bytes_available (bytes_in_pipe, from_master_nat) && bytes_in_pipe)
> >         ReadFile (from_master_nat, buf, sizeof(buf), &n, NULL);
> > +  else
> > +    {
> > +      DWORD target_pid = get_ttyp ()->nat_pipe_owner_pid;
> > +      DWORD resume_pid =
> > +	fhandler_pty_common::attach_console_temporarily (target_pid);
> > +      FlushConsoleInputBuffer (h_pcon_in_dupped);
> > +      fhandler_pty_common::resume_from_temporarily_attach (resume_pid);
> > +    }
> >     get_ttyp ()->discard_input = true;
> >     ReleaseMutex (input_mutex);
> >   }
> > @@ -2585,7 +2593,8 @@ fhandler_pty_master::write (const void *ptr, size_t len)
> >         for (size_t i = 0, j = 0; i < len; i++)
> >   	{
> >   	  process_sig_state r = process_sigs (buf[i], get_ttyp (), this);
> > -	  if (r != done_with_debugger)
> > +	  if (r != done_with_debugger &&
> > +	      (r != signalled || (ti.c_lflag & NOFLSH) || buf[i] == '\003'))
> >   	    {
> >   	      char c = buf[i];
> >   	      /* Workaround for pseudo console in Windows 11 */
> 
> Other than the minor commentary changes, this LGTM.

I'll push the version revised after GTG for the other patch
in this patch series.

Thanks!

-- 
Takashi Yano <[email protected]>