Cygwin: AF_UNIX: fix creating shared mem region in dup

reopen_shmem is accidentally called on the parent fhandler
rather than the child fhandler, and it's called too early.
Make sure to call it on the child and only after its shmem_handle
is valid.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2020-02-28 12:39:41 +01:00
parent ba2f251d43
commit 92b8b300c2

View File

@ -1201,12 +1201,6 @@ fhandler_socket_unix::dup (fhandler_base *child, int flags)
return -1; return -1;
} }
fhandler_socket_unix *fhs = (fhandler_socket_unix *) child; fhandler_socket_unix *fhs = (fhandler_socket_unix *) child;
if (reopen_shmem () < 0)
{
__seterrno ();
fhs->close ();
return -1;
}
if (backing_file_handle && backing_file_handle != INVALID_HANDLE_VALUE if (backing_file_handle && backing_file_handle != INVALID_HANDLE_VALUE
&& !DuplicateHandle (GetCurrentProcess (), backing_file_handle, && !DuplicateHandle (GetCurrentProcess (), backing_file_handle,
GetCurrentProcess (), &fhs->backing_file_handle, GetCurrentProcess (), &fhs->backing_file_handle,
@ -1224,6 +1218,12 @@ fhandler_socket_unix::dup (fhandler_base *child, int flags)
fhs->close (); fhs->close ();
return -1; return -1;
} }
if (fhs->reopen_shmem () < 0)
{
__seterrno ();
fhs->close ();
return -1;
}
fhs->sun_path (sun_path ()); fhs->sun_path (sun_path ());
fhs->peer_sun_path (peer_sun_path ()); fhs->peer_sun_path (peer_sun_path ());
fhs->connect_wait_thr = NULL; fhs->connect_wait_thr = NULL;