[PATCH 00/21] FIFO: Support multiple readers

Corinna Vinschen corinna-cygwin@cygwin.com
Fri May 8 10:11:48 GMT 2020


On May  7 16:21, Ken Brown via Cygwin-patches wrote:
> This project began as a an attempt to allow a FIFO to be opened
> multiple times for reading.  The initial motivation was that Midnight
> Commander running under tcsh does this (unsuccessfully on Cygwin).
> See
> 
>    https://sourceware.org/pipermail/cygwin/2019-December/243317.html
> 
> It quickly became apparent, however, that the current code doesn't
> even properly handle the case where the FIFO is *explicitly* opened
> only once for reading, but additional readers are created via
> dup/fork/exec.
> 
> This explained some of the bugs reported by Kristian Ivarsson.  See,
> for example, the thread starting here:
> 
>   https://sourceware.org/pipermail/cygwin/2020-March/000206.html
> 
> as well as later similar threads.
> 
> [The discussion continued in private email, with many bug reports and
> test programs by Kristian.  I'm very grateful to him for his reports
> and testing.]
> 
> The first 10 patches in this series make some improvements and bug
> fixes that came up along the way and don't specifically relate to
> multiple readers.  The next 10 patches, with the exception of "allow
> fc_handler list to grow dynamically", add the support for multiple
> readers.  The last one updates the commentary at the beginning of
> fhandler_fifo.cc that tries to explain how it all works.
> 
> The key ideas in these patches are:
> 
> 1. Use shared memory, so that all readers have the necessary
> information about the writers that are open.
> 
> 2. Designate one reader as the "owner".  This reader runs a thread
> that listens for connections and keeps track of the writers.
> 
> 3. Use a second shared memory block to be used for transfer of
> ownership.  Ownership must be transferred when the owner closes or
> execs.  And a reader that wants to read or run select must take
> ownership in order to be able to poll the writers for input.

This looks great.  Please push at your own discretion.


Thanks,
Corinna

-- 
Corinna Vinschen
Cygwin Maintainer


More information about the Cygwin-patches mailing list