diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2018-03-10 21:12:27 +0100 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2018-03-10 21:12:27 +0100 |
commit | 4f1ee1a3e787009bbf1b13e163e92a7616418a04 (patch) | |
tree | 17bb11049475f164a67d59002ab943937652c2de | |
parent | 7b1028974b529b22a20566c4fdf50440abefe725 (diff) | |
download | cygnal-4f1ee1a3e787009bbf1b13e163e92a7616418a04.tar.gz cygnal-4f1ee1a3e787009bbf1b13e163e92a7616418a04.tar.bz2 cygnal-4f1ee1a3e787009bbf1b13e163e92a7616418a04.zip |
Cygwin: AF_UNIX: fix dup
Reorder so fhandler_socket::dup is called first. Add missing
duplication of backing_file_handle.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
-rw-r--r-- | winsup/cygwin/fhandler_socket_unix.cc | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/winsup/cygwin/fhandler_socket_unix.cc b/winsup/cygwin/fhandler_socket_unix.cc index 6e7d6f147..4f7d9e00e 100644 --- a/winsup/cygwin/fhandler_socket_unix.cc +++ b/winsup/cygwin/fhandler_socket_unix.cc @@ -1029,7 +1029,21 @@ fhandler_socket_unix::~fhandler_socket_unix () int fhandler_socket_unix::dup (fhandler_base *child, int flags) { + if (fhandler_socket::dup (child, flags)) + { + __seterrno (); + return -1; + } fhandler_socket_unix *fhs = (fhandler_socket_unix *) child; + if (backing_file_handle && backing_file_handle != INVALID_HANDLE_VALUE + && !DuplicateHandle (GetCurrentProcess (), backing_file_handle, + GetCurrentProcess (), &fhs->backing_file_handle, + 0, TRUE, DUPLICATE_SAME_ACCESS)) + { + __seterrno (); + fhs->close (); + return -1; + } fhs->set_sun_path (get_sun_path ()); fhs->set_peer_sun_path (get_peer_sun_path ()); InitializeSRWLock (&fhs->conn_lock); @@ -1038,7 +1052,7 @@ fhandler_socket_unix::dup (fhandler_base *child, int flags) fhs->connect_wait_thr = NULL; fhs->cwt_termination_evt = NULL; fhs->cwt_param = NULL; - return fhandler_socket::dup (child, flags); + return 0; } /* Waiter thread method. Here we wait for a pipe instance to become |