Cygwin: fhandler_pipe::open_setup: fail on error creating mutexes

This commit is contained in:
Ken Brown 2021-09-18 08:34:04 -04:00
parent e5fcb021cc
commit 6fc0aa8e5d
1 changed files with 16 additions and 3 deletions

View File

@ -194,26 +194,39 @@ out:
bool bool
fhandler_pipe::open_setup (int flags) fhandler_pipe::open_setup (int flags)
{ {
bool read_mtx_created = false;
if (!fhandler_base::open_setup (flags)) if (!fhandler_base::open_setup (flags))
goto err; goto err;
if (get_dev () == FH_PIPER && !read_mtx) if (get_dev () == FH_PIPER && !read_mtx)
{ {
SECURITY_ATTRIBUTES *sa = sec_none_cloexec (flags); SECURITY_ATTRIBUTES *sa = sec_none_cloexec (flags);
read_mtx = CreateMutex (sa, FALSE, NULL); read_mtx = CreateMutex (sa, FALSE, NULL);
if (!read_mtx) if (read_mtx)
read_mtx_created = true;
else
{
debug_printf ("CreateMutex read_mtx failed: %E"); debug_printf ("CreateMutex read_mtx failed: %E");
goto err;
}
} }
if (!hdl_cnt_mtx) if (!hdl_cnt_mtx)
{ {
SECURITY_ATTRIBUTES *sa = sec_none_cloexec (flags); SECURITY_ATTRIBUTES *sa = sec_none_cloexec (flags);
hdl_cnt_mtx = CreateMutex (sa, FALSE, NULL); hdl_cnt_mtx = CreateMutex (sa, FALSE, NULL);
if (!hdl_cnt_mtx) 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) if (get_dev () == FH_PIPEW && !query_hdl)
set_pipe_non_blocking (is_nonblocking ()); set_pipe_non_blocking (is_nonblocking ());
return true; return true;
err_close_read_mtx:
if (read_mtx_created)
CloseHandle (read_mtx);
err: err:
return false; return false;
} }