[newlib-cygwin] Cygwin: fhandler_pipe::open_setup: fail on error creating mutexes
Ken Brown
kbrown@sourceware.org
Mon Sep 20 19:10:34 GMT 2021
https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=6fc0aa8e5d6cd7e344afc967d30253ed40541843
commit 6fc0aa8e5d6cd7e344afc967d30253ed40541843
Author: Ken Brown <kbrown@cornell.edu>
Date: Sat Sep 18 08:34:04 2021 -0400
Cygwin: fhandler_pipe::open_setup: fail on error creating mutexes
Diff:
---
winsup/cygwin/fhandler_pipe.cc | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/winsup/cygwin/fhandler_pipe.cc b/winsup/cygwin/fhandler_pipe.cc
index 590ecf667..449e268ab 100644
--- a/winsup/cygwin/fhandler_pipe.cc
+++ b/winsup/cygwin/fhandler_pipe.cc
@@ -194,26 +194,39 @@ out:
bool
fhandler_pipe::open_setup (int flags)
{
+ bool read_mtx_created = false;
+
if (!fhandler_base::open_setup (flags))
goto err;
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 read_mtx failed: %E");
+ if (read_mtx)
+ read_mtx_created = true;
+ else
+ {
+ debug_printf ("CreateMutex read_mtx failed: %E");
+ goto err;
+ }
}
if (!hdl_cnt_mtx)
{
SECURITY_ATTRIBUTES *sa = sec_none_cloexec (flags);
hdl_cnt_mtx = CreateMutex (sa, FALSE, NULL);
if (!hdl_cnt_mtx)
- debug_printf ("CreateMutex hdl_cnt_mtx failed: %E");
+ {
+ debug_printf ("CreateMutex hdl_cnt_mtx failed: %E");
+ goto err_close_read_mtx;
+ }
}
if (get_dev () == FH_PIPEW && !query_hdl)
set_pipe_non_blocking (is_nonblocking ());
return true;
+err_close_read_mtx:
+ if (read_mtx_created)
+ CloseHandle (read_mtx);
err:
return false;
}
More information about the Cygwin-cvs
mailing list