[newlib-cygwin] Cygwin: FIFO: add 'record_connection' method

Ken Brown kbrown@sourceware.org
Thu May 9 18:52:00 GMT 2019


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

commit f3d1fe2ff81ad6f5327caa9229626e39101da2c9
Author: Ken Brown <kbrown@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. */



More information about the Cygwin-cvs mailing list