From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 66787 invoked by alias); 1 Feb 2020 21:36:54 -0000 Mailing-List: contact cygwin-cvs-help@cygwin.com; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: cygwin-cvs-owner@cygwin.com Received: (qmail 66745 invoked by uid 9996); 1 Feb 2020 21:36:54 -0000 Date: Sat, 01 Feb 2020 21:36:00 -0000 Message-ID: <20200201213654.66743.qmail@sourceware.org> Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Ken Brown To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin] Cygwin: fhandler_fifo.cc: add commentary X-Act-Checkin: newlib-cygwin X-Git-Author: Ken Brown X-Git-Refname: refs/heads/master X-Git-Oldrev: 76dca77f049271e2529c25de8a396e65dbce615d X-Git-Newrev: 279f230620d784c7df91dc5242f76427e706ded7 X-SW-Source: 2020-q1/txt/msg00051.txt https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=279f230620d784c7df91dc5242f76427e706ded7 commit 279f230620d784c7df91dc5242f76427e706ded7 Author: Ken Brown Date: Sat Feb 1 16:36:31 2020 -0500 Cygwin: fhandler_fifo.cc: add commentary Diff: --- winsup/cygwin/fhandler_fifo.cc | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/winsup/cygwin/fhandler_fifo.cc b/winsup/cygwin/fhandler_fifo.cc index ef568f6..19cd0e5 100644 --- a/winsup/cygwin/fhandler_fifo.cc +++ b/winsup/cygwin/fhandler_fifo.cc @@ -22,6 +22,35 @@ #include "ntdll.h" #include "cygwait.h" +/* + Overview: + + Currently a FIFO can be opened once for reading and multiple + times for writing. Any attempt to open the FIFO a second time + for reading fails with EACCES (from STATUS_ACCESS_DENIED). + + When a FIFO is opened for reading, + fhandler_fifo::create_pipe_instance is called to create the first + instance of a Windows named pipe server (Windows terminology). A + "listen_client" thread is also started; it waits for pipe clients + (Windows terminology again) to connect. This happens every time + a process opens the FIFO for writing. + + The listen_client thread creates new instances of the pipe server + as needed, so that there is always an instance available for a + writer to connect to. + + The reader maintains a list of "fifo_client_handlers", one for + each pipe instance. A fifo_client_handler manages the connection + between the pipe instance and a writer connected to that pipe + instance. + + TODO: Allow a FIFO to be opened multiple times for reading. + Maybe this could be done by using shared memory, so that all + readers could have access to the same list of writers. +*/ + + /* This is only to be used for writers. When reading, STATUS_PIPE_EMPTY simply means there's no data to be read. */ #define STATUS_PIPE_IS_CLOSED(status) \