https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=f3d1fe2ff81ad6f5327caa9229626e39101da2c9

commit f3d1fe2ff81ad6f5327caa9229626e39101da2c9
Author: Ken Brown <kbr...@cornell.edu>
Date:   Thu May 9 10:58:29 2019 -0400

    Cygwin: FIFO: add 'record_connection' method
    
    Future commits will have to re-use the code for recording a client
    connection.  For convenience, factor out this code into a new method.

Diff:
---
 winsup/cygwin/fhandler.h       |  1 +
 winsup/cygwin/fhandler_fifo.cc | 23 ++++++++++++++---------
 2 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h
index f5ed61c..3b2b194 100644
--- a/winsup/cygwin/fhandler.h
+++ b/winsup/cygwin/fhandler.h
@@ -1279,6 +1279,7 @@ class fhandler_fifo: public fhandler_base
   void delete_client_handler (int);
   bool listen_client ();
   int stop_listen_client ();
+  void record_connection (fifo_client_handler&);
 public:
   fhandler_fifo ();
   bool hit_eof ();
diff --git a/winsup/cygwin/fhandler_fifo.cc b/winsup/cygwin/fhandler_fifo.cc
index dd59eb6..8dfe496 100644
--- a/winsup/cygwin/fhandler_fifo.cc
+++ b/winsup/cygwin/fhandler_fifo.cc
@@ -300,6 +300,19 @@ fhandler_fifo::listen_client ()
   return true;
 }
 
+void
+fhandler_fifo::record_connection (fifo_client_handler& fc)
+{
+  fifo_client_lock ();
+  fc.state = fc_connected;
+  nconnected++;
+  set_pipe_non_blocking (fc.fh->get_handle (), true);
+  fifo_client_unlock ();
+  HANDLE evt = InterlockedExchangePointer (&fc.connect_evt, NULL);
+  if (evt)
+    CloseHandle (evt);
+}
+
 DWORD
 fhandler_fifo::listen_client_thread ()
 {
@@ -363,19 +376,11 @@ fhandler_fifo::listen_client_thread ()
                  break;
                }
            }
-         HANDLE evt = NULL;
          switch (status)
            {
            case STATUS_SUCCESS:
            case STATUS_PIPE_CONNECTED:
-             fifo_client_lock ();
-             fc.state = fc_connected;
-             nconnected++;
-             set_pipe_non_blocking (fc.fh->get_handle (), true);
-             evt = InterlockedExchangePointer (&fc.connect_evt, NULL);
-             if (evt)
-               CloseHandle (evt);
-             fifo_client_unlock ();
+             record_connection (fc);
              break;
            case STATUS_PIPE_LISTENING:
              /* Retry. */

Reply via email to