diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h index 273df6cbe..2cdd56bd1 100644 --- a/winsup/cygwin/fhandler.h +++ b/winsup/cygwin/fhandler.h @@ -1285,6 +1285,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 dd59eb6e0..8dfe49662 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. */