This is the mail archive of the
cygwin-developers
mailing list for the Cygwin project.
Re: Rewriting the FIFO code
- From: Ken Brown <kbrown at cornell dot edu>
- To: "cygwin-developers at cygwin dot com" <cygwin-developers at cygwin dot com>
- Date: Thu, 28 Feb 2019 21:25:46 +0000
- Subject: Re: Rewriting the FIFO code
- References: <effca564-9fad-1682-e384-ea4441f85031@cornell.edu> <c95425a2-59f8-f07a-6401-9609be581189@cornell.edu> <a8eee59e-81d1-18f3-d757-6bd70c484881@cornell.edu> <20181226113701.GC4061@calimero.vinschen.de> <17a43c00-ac38-e0d1-6635-d019751fbebe@cornell.edu> <20181226190305.GA3826@calimero.vinschen.de> <b5bd8bff-31a8-b6d0-1e77-62f919eceaea@cornell.edu> <20190123130547.GW2802@calimero.vinschen.de>
On 1/23/2019 8:05 AM, Corinna Vinschen wrote:
> On Jan 22 20:44, Ken Brown wrote:
>> On 12/26/2018 2:03 PM, Corinna Vinschen wrote:
>>> On Dec 26 14:00, Ken Brown wrote:
>>>> Thanks for the encouragement, and Happy Holidays to you too. One question: In
>>>> the new AF_UNIX socket code you mostly used NT functions, but the existing FIFO
>>>> code uses Win32 functions. Do you prefer NT functions for new code?
>>>
>>> The NT functions have some advantages over the Win32 functions.
>>> For instance, WaitNamedPipe is not interruptible, while
>>> NtFsControlFile(FSCTL_PIPE_WAIT) can be called asynchronously
>>> and then you can just wait for an event object via cygwait
>>> (see fhandler_socket_unix::wait_pipe_thread).
>>>
>>> So, in theory I'd prefer NT functions, but if you feel uncomfortable
>>> and just want to implement away, feel free to go ahead with Win32
>>> functions.
>>
>> I've decided to use Win32 functions for now, not because of discomfort but
>> because it allowed me to use more of the existing code. I can always change
>> that later.
>
> Sounds good to me. Just... can we make the fifo pipes PIPE_NOWAIT, by
> any chance and make fhandler_fifo a derived class of fhandler_base?
I'm working on this now and have two questions.
First, if I make fhandler_fifo derived from fhandler_base, don't I have to use
NT functions for creating pipes, etc.? (This isn't a problem, but I just want
to make sure I understand). For one thing, my understanding is that
asynchronous I/O can only be done using overlapped I/O or NT functions. For
another thing, fhandler_base uses NT functions for I/O, so I think I have to be
consistent with that.
Second, fhandler_base_overlapped uses an atomic write buffer. Is there a
problem giving that up? Do I need to find some other way of making sure that
writes of PIPE_BUF bytes or fewer are atomic?
Ken