[PATCH 00/12] FIFO: fix multiple reader support
Ken Brown
kbrown@cornell.edu
Thu Jul 16 16:19:03 GMT 2020
There were several flaws in my previous attempt to add support for
explicitly opening a FIFO multiple times for reading. (By
"explicitly" I mean by calling open rather than by calling
fork/exec/dup.) See
https://sourceware.org/pipermail/cygwin/2020-July/245456.html
for one indication of problems
The most important flaw was that I tried to use an indirect,
unreliable method for determining whether there are writers open.
This is fixed in the second patch of this series by adding a member
'_nwriters' to struct fifo_shmem_t, which counts the number of open
writers.
We now have to give writers access to the shared memory as well as
readers, so that they can increment _nwriters in open/fork/exec/dup
and decrement it in close.
The other patches contain miscellaneous fixes/improvements.
Ken Brown (12):
Cygwin: FIFO: fix problems finding new owner
Cygwin: FIFO: keep a writer count in shared memory
Cygwin: fhandler_fifo::hit_eof: improve reliability
Cygwin: FIFO: reduce I/O interleaving
Cygwin: FIFO: improve taking ownership in fifo_reader_thread
Cygwin: FIFO: fix indentation
Cygwin: FIFO: make certain errors non-fatal
Cygwin: FIFO: add missing lock
Cygwin: fhandler_fifo::take_ownership: don't set event unnecessarily
Cygwin: FIFO: allow take_ownership to be interrupted
Cygwin: FIFO: clean up
Cygwin: FIFO: update commentary
winsup/cygwin/fhandler.h | 55 +--
winsup/cygwin/fhandler_fifo.cc | 725 ++++++++++++++++++---------------
winsup/cygwin/select.cc | 14 +-
3 files changed, 433 insertions(+), 361 deletions(-)
--
2.27.0
More information about the Cygwin-patches
mailing list