From 035bf7dc84d98f6f643ba2dd00b08c34dc8eb984 Mon Sep 17 00:00:00 2001 From: Ken Brown Date: Fri, 22 Mar 2019 19:30:39 +0000 Subject: Cygwin: FIFO: update clone and dup Deal with all clients. --- winsup/cygwin/fhandler_fifo.cc | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'winsup/cygwin/fhandler_fifo.cc') diff --git a/winsup/cygwin/fhandler_fifo.cc b/winsup/cygwin/fhandler_fifo.cc index 1dcb3b3..c295c23 100644 --- a/winsup/cygwin/fhandler_fifo.cc +++ b/winsup/cygwin/fhandler_fifo.cc @@ -816,6 +816,31 @@ fhandler_fifo::dup (fhandler_base *child, int flags) __seterrno (); return -1; } + for (int i = 0; i < nclients; i++) + { + if (!DuplicateHandle (GetCurrentProcess (), client[i].fh->get_handle (), + GetCurrentProcess (), + &fhf->client[i].fh->get_handle (), + 0, true, DUPLICATE_SAME_ACCESS) + || !DuplicateHandle (GetCurrentProcess (), client[i].connect_evt, + GetCurrentProcess (), + &fhf->client[i].connect_evt, + 0, true, DUPLICATE_SAME_ACCESS) + || !DuplicateHandle (GetCurrentProcess (), client[i].dummy_evt, + GetCurrentProcess (), + &fhf->client[i].dummy_evt, + 0, true, DUPLICATE_SAME_ACCESS)) + { + CloseHandle (fhf->read_ready); + CloseHandle (fhf->write_ready); + fhf->close (); + __seterrno (); + return -1; + } + } + fhf->listen_client_thr = NULL; + fhf->lct_termination_evt = NULL; + fhf->fifo_client_unlock (); return 0; } -- cgit v1.1