diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h index d309be2f7..13fba9a14 100644 --- a/winsup/cygwin/fhandler.h +++ b/winsup/cygwin/fhandler.h @@ -1205,6 +1205,7 @@ public: select_record *select_except (select_stuff *); char *get_proc_fd_name (char *buf); int open (int flags, mode_t mode = 0); + void open_setup (int flags); void fixup_after_fork (HANDLE); int dup (fhandler_base *child, int); int close (); diff --git a/winsup/cygwin/fhandler_pipe.cc b/winsup/cygwin/fhandler_pipe.cc index 6994a5dce..9b4255cfd 100644 --- a/winsup/cygwin/fhandler_pipe.cc +++ b/winsup/cygwin/fhandler_pipe.cc @@ -191,6 +191,19 @@ out: return 0; } +void +fhandler_pipe::open_setup (int flags) +{ + fhandler_base::open_setup (flags); + if (get_dev () == FH_PIPER && !read_mtx) + { + SECURITY_ATTRIBUTES *sa = sec_none_cloexec (flags); + read_mtx = CreateMutex (sa, FALSE, NULL); + if (!read_mtx) + debug_printf ("CreateMutex failed: %E"); + } +} + off_t fhandler_pipe::lseek (off_t offset, int whence) {