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.
This commit is contained in:
Ken Brown 2019-05-09 10:58:29 -04:00
parent 1372021a2d
commit f3d1fe2ff8
2 changed files with 15 additions and 9 deletions

View File

@ -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 ();

View File

@ -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. */