From: Ken Brown Date: Sun, 14 Apr 2019 19:15:56 +0000 (+0000) Subject: Cygwin: FIFO: hit_eof: add a call to fifo_client_lock X-Git-Tag: cygwin-3_1_0-release~277 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=528169992668a7e292b8c1c5a39e2c1e24ff6683;p=newlib-cygwin.git Cygwin: FIFO: hit_eof: add a call to fifo_client_lock The second check of nconnected needs to be protected by a lock as well as the first. --- diff --git a/winsup/cygwin/fhandler_fifo.cc b/winsup/cygwin/fhandler_fifo.cc index 901696444..70551ebac 100644 --- a/winsup/cygwin/fhandler_fifo.cc +++ b/winsup/cygwin/fhandler_fifo.cc @@ -705,15 +705,20 @@ fhandler_fifo::raw_write (const void *ptr, size_t len) bool fhandler_fifo::hit_eof () { - fifo_client_lock (); - bool eof = (nconnected == 0); - fifo_client_unlock (); - if (eof) - { - /* Give the listen_client thread time to catch up, then recheck. */ - Sleep (1); + bool eof; + bool retry = true; + +retry: + fifo_client_lock (); eof = (nconnected == 0); - } + fifo_client_unlock (); + if (eof && retry) + { + retry = false; + /* Give the listen_client thread time to catch up. */ + Sleep (1); + goto retry; + } return eof; }