https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=ef269531a96b649ae27395f272cf95aa2c7062fa
commit ef269531a96b649ae27395f272cf95aa2c7062fa Author: Ken Brown <[email protected]> Date: Sat Apr 20 11:49:35 2019 -0400 Cygwin: FIFO: duplicate the i/o handle when opening a duplexer Don't use the same i/o handle for the first client handler as is used for the fhandler itself; this can lead to a later attempt to close the same handle twice. Instead use a duplicate. Diff: --- winsup/cygwin/fhandler_fifo.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/winsup/cygwin/fhandler_fifo.cc b/winsup/cygwin/fhandler_fifo.cc index 409144f..0a6dc05 100644 --- a/winsup/cygwin/fhandler_fifo.cc +++ b/winsup/cygwin/fhandler_fifo.cc @@ -480,7 +480,14 @@ fhandler_fifo::open (int flags, mode_t) res = error_errno_set; goto out; } - fh->set_handle (ph); + if (!DuplicateHandle (GetCurrentProcess (), ph, GetCurrentProcess (), + &fh->get_handle (), 0, true, DUPLICATE_SAME_ACCESS)) + { + res = error_set_errno; + fh->close (); + delete fh; + goto out; + } fh->set_flags (flags); if (!(connect_evt = create_event ())) {
