This is the mail archive of the cygwin-developers mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Rewriting the FIFO code


On 2/28/2019 5:23 PM, Corinna Vinschen wrote:
> On Feb 28 21:25, Ken Brown wrote:
>> 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.
> 
> For consistency it would be nice, but no, you don't have to use
> NT function.  PIPE_NOWAIT is also available via Win32 API.

I've finally finished a first pass at the FIFO code.  I ended up finding it more 
convenient to use the NT API and to initially create pipes in blocking mode, so 
that I could easily wait for a client to connect.  After there's a connection, I 
set the pipes non-blocking.

I've tested the code by running Kerrisk's server/client programs cited in 
https://cygwin.com/ml/cygwin/2015-03/msg00047.html.  I've also run the test case 
that I posted in http://www.cygwin.org/ml/cygwin/2015-12/msg00311.html.

There's still a lot more testing that needs to be done, and I haven't thought at 
all about the duplexer case yet, but I think I've done enough that a review 
would be helpful when you get the time.  I'll send the patches to cygwin-patches 
shortly.

Once we finish the review/revise cycle, it might make sense to commit the 
patches to a topic/fifo branch for further work.  I don't think it's ready for 
master yet.

Ken

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]