https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=d1b36ea949e275c803787523b0b04657895638fc
commit d1b36ea949e275c803787523b0b04657895638fc Author: Ken Brown <[email protected]> Date: Sat Jun 22 13:58:12 2019 -0400 Cygwin: FIFO: avoid deadlock when closing fhandler_fifo::close could be called from a signal handler or another thread at a time when another function is holding the fifo_client lock. This could prevent the listen_client thread from acting on the thread termination event. Avoid a deadlock by calling fifo_client_unlock at the beginning of fhandler_fifo::close. Diff: --- winsup/cygwin/fhandler_fifo.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/winsup/cygwin/fhandler_fifo.cc b/winsup/cygwin/fhandler_fifo.cc index 4291a7e..8afa397 100644 --- a/winsup/cygwin/fhandler_fifo.cc +++ b/winsup/cygwin/fhandler_fifo.cc @@ -928,6 +928,9 @@ fhandler_fifo::stop_listen_client () int fhandler_fifo::close () { + /* Avoid deadlock with lct in case this is called from a signal + handler or another thread. */ + fifo_client_unlock (); int ret = stop_listen_client (); if (read_ready) CloseHandle (read_ready);
