Cygwin: FIFO: avoid WFMO error in listen_client_thread

Don't set lct_termination_evt to NULL too early in
fhandler_fifo::stop_listen_client.  Doing so leads to an "Invalid
Handle" error in WFMO.
This commit is contained in:
Ken Brown 2019-04-20 11:22:29 -04:00
parent ef269531a9
commit 24c56e5a2c
1 changed files with 7 additions and 5 deletions

View File

@ -844,22 +844,24 @@ int
fhandler_fifo::stop_listen_client ()
{
int ret = 0;
HANDLE evt = InterlockedExchangePointer (&lct_termination_evt, NULL);
HANDLE thr = InterlockedExchangePointer (&listen_client_thr, NULL);
HANDLE thr, evt;
thr = InterlockedExchangePointer (&listen_client_thr, NULL);
if (thr)
{
if (evt)
SetEvent (evt);
if (lct_termination_evt)
SetEvent (lct_termination_evt);
WaitForSingleObject (thr, INFINITE);
DWORD err;
GetExitCodeThread (thr, &err);
if (err)
{
ret = -1;
debug_printf ("listen_client_thread exited with error, %E");
debug_printf ("listen_client_thread exited with error");
}
CloseHandle (thr);
}
evt = InterlockedExchangePointer (&lct_termination_evt, NULL);
if (evt)
CloseHandle (evt);
return ret;