public inbox for cygwin-developers@cygwin.com
 help / color / mirror / Atom feed
From: Corinna Vinschen <corinna-cygwin@cygwin.com>
To: cygwin-developers@cygwin.com
Subject: Re: 3.3.0: Possible regression in cygwin DLL (Win10); fixed in snapshot
Date: Sat, 6 Nov 2021 12:42:46 +0100	[thread overview]
Message-ID: <YYZqNiBRTfYWwFev@calimero.vinschen.de> (raw)
In-Reply-To: <20211106151047.4d8f626bd6ebe9e4d8017f3b@nifty.ne.jp>

On Nov  6 15:10, Takashi Yano wrote:
> # This topic is moved from cygwin@cygwin.com mailing list.
> 
> Hi Ken,
> 
> On Fri, 5 Nov 2021 16:08:31 -0400
> Ken Brown wrote:
> > On 11/5/2021 3:41 PM, Takashi Yano via Cygwin wrote:
> > > Thanks much for the detailed steps. I could reproduce the problem.
> > > 
> > > It seems that the cause is the overhaul for the pipe implementation.
> > > I also found the workaround for this issue. Please try:
> > > export CYGWIN=pipe_byte
> > > 
> > > Corinna, Ken,
> > > What about setting pipe mode to byte by default?
> > 
> > I have a vague recollection that this caused some other problem, but I'll have 
> > to review the email discussions from a few months ago.  I'm traveling at the 
> > moment and won't get to this for a few days.
> > 
> > In the meantime, could you explain (probably on cygwin-developers) why message 
> > mode causes the reported issue?  Also, does the problem occur only when there 
> > are non-Cygwin apps involved?
> 
> I digged deeper this problem and might find the cause.
> 
> Perhaps, C# program sometimes writes 0 byte to stdout.
> As a result, if stdout is a message pipe, raw_read() returns
> 0 byte and EOF is falsely detected. So, setting pipe type
> to byte solves the issue.

Given that EOF is reported as status STATUS_END_OF_FILE, wouldn't it
make sense to just check for 0 bytes in raw_read and continue the loop
as if literally nothing has happened?

> diff --git a/winsup/cygwin/fhandler_pipe.cc b/winsup/cygwin/fhandler_pipe.cc
> index 43771e8f7..bc06d157c 100644
> --- a/winsup/cygwin/fhandler_pipe.cc
> +++ b/winsup/cygwin/fhandler_pipe.cc
> @@ -393,7 +393,8 @@ fhandler_pipe::raw_read (void *ptr, size_t& len)
>  	    }
>  	}
>  
> -      if (nbytes_now == 0 || status == STATUS_BUFFER_OVERFLOW)
> +      if ((nbytes_now == 0 && !NT_SUCCESS (status))
> +	  || status == STATUS_BUFFER_OVERFLOW)
>  	break;
>      }
>    ReleaseMutex (read_mtx);

Oh, heh.

> I am not sure which is the better solution.

Me neither.  I remember that using a message type pipe fixed some
problem of old, but just because message pipes were a solution in the
past...  A quick search uncovered that the message type pipes have been
introduced in April 2012.  We might have to search the mailing list
archives to fiund the reason.

The question is if that problem is still present in the overhauled code
at all.

> P.S.
> Unfortunately, these solutions do not resolve the issue
> which is another issue with C# program:
> https://cygwin.com/pipermail/cygwin/2021-March/247987.html
> This still needs FILE_SYNCHRONOUS_IO_NONALERT flag.

If we want to add FILE_SYNCHRONOUS_IO_NONALERT, this would have to be
solved by running NtReadFile/NtWriteFile synchronously in a thread,
started on every invocation of raw_read/raw_write.  raw_read/raw_write
would then call cygwait on the thread object.  To break on signal or
thread cancallation events, it would have to call CancelSynchronousIo.
That's certainly doable.


Corinna

  reply	other threads:[~2021-11-06 11:42 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CAEv6GOB8PXHgHoz7hdJy6Bia2GWEmUDnTd252gTGinz2vuv=hA@mail.gmail.com>
     [not found] ` <20211105123950.b118a7f2ba38379764df4c12@nifty.ne.jp>
     [not found]   ` <CAEv6GOA-y58YrftXgEgFrjqtOTHmfdu2Vrq76Lwn0suZpZ=U9w@mail.gmail.com>
     [not found]     ` <20211105170542.96ce6dd4ca32880ddfddd660@nifty.ne.jp>
     [not found]       ` <CAEv6GODiM88Xfhk9R3AcEW6UTYSzACzYe4C0gPoTYm=u9ZTqRQ@mail.gmail.com>
     [not found]         ` <20211106044116.698b465a5d8ed6ce2cc75c99@nifty.ne.jp>
     [not found]           ` <2cfa5de7-3b95-9062-4572-f36d304bc916@cornell.edu>
2021-11-06  6:10             ` Takashi Yano
2021-11-06 11:42               ` Corinna Vinschen [this message]
2021-11-06 12:02                 ` Corinna Vinschen
2021-11-06 14:13                   ` Takashi Yano
2021-11-06 17:20                     ` Corinna Vinschen
2021-11-07  3:01                       ` Takashi Yano
2021-11-06 16:38                 ` Ken Brown
2021-11-06 17:20                   ` Corinna Vinschen
2021-11-07  3:46                   ` Takashi Yano
2021-11-07 22:20                     ` Ken Brown
2021-11-08  8:23                       ` Takashi Yano
2021-11-08  9:46                         ` Corinna Vinschen
2021-11-10  8:30                 ` Takashi Yano
2021-11-10 10:34                   ` Corinna Vinschen
2021-11-10 13:30                     ` Takashi Yano
2021-11-10 20:35                       ` Corinna Vinschen
2021-11-10 21:32                         ` Ken Brown
2021-11-11 16:11                           ` Ken Brown
2021-11-12  8:38                             ` Takashi Yano
2021-11-16 23:46                             ` Takashi Yano
2021-11-17  8:10                               ` Takashi Yano
2021-11-17 15:12                                 ` Ken Brown
2021-11-11  9:52                         ` Corinna Vinschen
2021-11-11 11:12                           ` Takashi Yano
2021-11-11 11:33                             ` Corinna Vinschen
2021-11-11 12:02                               ` Takashi Yano
2021-11-11 13:20                                 ` Takashi Yano
2021-11-11 16:07                                   ` Corinna Vinschen
2021-11-12  8:33                             ` Takashi Yano
2021-11-12 10:02                               ` Corinna Vinschen
2021-12-12 13:26                                 ` Takashi Yano
2021-12-12 13:36                                   ` Ken Brown
2021-12-13 11:15                                     ` Takashi Yano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YYZqNiBRTfYWwFev@calimero.vinschen.de \
    --to=corinna-cygwin@cygwin.com \
    --cc=cygwin-developers@cygwin.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).