aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Brown <kbrown@cornell.edu>2021-09-18 08:34:04 -0400
committerKen Brown <kbrown@cornell.edu>2021-09-18 08:49:06 -0400
commit6fc0aa8e5d6cd7e344afc967d30253ed40541843 (patch)
tree7b97cadcc626848bfe320c266d691f02885b319a
parente5fcb021cc9dcb1f19d45030457be86b4a226e65 (diff)
downloadnewlib-6fc0aa8e5d6cd7e344afc967d30253ed40541843.zip
newlib-6fc0aa8e5d6cd7e344afc967d30253ed40541843.tar.gz
newlib-6fc0aa8e5d6cd7e344afc967d30253ed40541843.tar.bz2
Cygwin: fhandler_pipe::open_setup: fail on error creating mutexes
-rw-r--r--winsup/cygwin/fhandler_pipe.cc19
1 files changed, 16 insertions, 3 deletions
diff --git a/winsup/cygwin/fhandler_pipe.cc b/winsup/cygwin/fhandler_pipe.cc
index 590ecf6..449e268 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;
}