3.3.0: Possible regression in cygwin DLL (Win10); fixed in snapshot

Corinna Vinschen corinna-cygwin@cygwin.com
Wed Nov 10 20:35:29 GMT 2021


On Nov 10 22:30, Takashi Yano wrote:
> On Wed, 10 Nov 2021 11:34:25 +0100
> Corinna Vinschen wrote:
> > On Nov 10 17:30, Takashi Yano wrote:
> > > On Sat, 6 Nov 2021 12:42:46 +0100
> > > Corinna Vinschen wrote:
> > > > On Nov  6 15:10, Takashi Yano wrote:
> > > > > 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.
> > > 
> > > I tried to implement your idea, however, I noticed that
> > > NtQueryObject(ObjectNameInformation) call in
> > > get_query_hdl_per_process() is blocked while reading the
> > > pipe if FIPE_SYNCHRONOUS_IO_NONALERT is set and pipe is
> > > in blocking mode.
> > > 
> > > So I would like to propose alternative implementation with
> > > FILE_SYNCHRONOUS_IO_NONALERT being set. Please have a look
> > > at attached patch. With this patch, pipe itself in read side
> > > is always set to nonblocking mode and simulate the blocking
> > > behaviour in raw_read(). This can eliminate creating thread
> > > for reading as well as calling CancelSynchronousIo().
> > > 
> > > Note that setting FILE_SYNCHRONOUS_IO_NONALERT only for read
> > > pipe seems to be enough for C# programs.
> > > 
> > > What do you think of this implementation?
> > 
> > Can you push this to the topic/pipe branch for playing?  I updated
> > the branch to current master.
> 
> Thanks. I have just pushed the experimental patch to topic/pipe.
> Please try. If something wrong, please point it out.

Great, I'll have a look.  Ken, you're looking as well, right?


Corinna


More information about the Cygwin-developers mailing list