diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h index 13fba9a14..46381c397 100644 --- a/winsup/cygwin/fhandler.h +++ b/winsup/cygwin/fhandler.h @@ -1208,6 +1208,7 @@ public: void open_setup (int flags); void fixup_after_fork (HANDLE); int dup (fhandler_base *child, int); + void set_close_on_exec (bool val); int close (); void __reg3 raw_read (void *ptr, size_t& len); int ioctl (unsigned int cmd, void *); diff --git a/winsup/cygwin/fhandler_fifo.cc b/winsup/cygwin/fhandler_fifo.cc index aa89fa7ae..37498f547 100644 --- a/winsup/cygwin/fhandler_fifo.cc +++ b/winsup/cygwin/fhandler_fifo.cc @@ -1817,4 +1817,6 @@ fhandler_fifo::set_close_on_exec (bool val) set_no_inheritance (fc_handler[i].h, val); fifo_client_unlock (); } + if (select_sem) + set_no_inheritance (select_sem, val); } diff --git a/winsup/cygwin/fhandler_pipe.cc b/winsup/cygwin/fhandler_pipe.cc index 70cfa3784..da473a1dc 100644 --- a/winsup/cygwin/fhandler_pipe.cc +++ b/winsup/cygwin/fhandler_pipe.cc @@ -515,6 +515,16 @@ fhandler_pipe_fifo::raw_write (const void *ptr, size_t len) return nbytes ?: -1; } +void +fhandler_pipe::set_close_on_exec (bool val) +{ + fhandler_base::set_close_on_exec (val); + if (read_mtx) + set_no_inheritance (read_mtx, val); + if (select_sem) + set_no_inheritance (select_sem, val); +} + void fhandler_pipe::fixup_after_fork (HANDLE parent) {