From c2a65f1e0a3c229adaf4b88b41ad7e374ba736a4 Mon Sep 17 00:00:00 2001 From: cgf Date: Tue, 26 Oct 2004 21:13:49 +0000 Subject: [PATCH] * cygtls.cc (_cygtls::fixup_after_fork): Wipe out exitsock local since it should not be used by the child. * select.cc (start_thread_socket): Turn off inheritance for exitsock. Don't add exitsock to exception mask since it should never get an exception. (socket_cleanup): Change some debug messages for consistency. * fhandler_socket.cc (fhandler_socket::dup): Change comment wording slightly. --- winsup/cygwin/ChangeLog | 11 +++++++++++ winsup/cygwin/cygtls.cc | 1 + winsup/cygwin/fhandler_socket.cc | 4 ++-- winsup/cygwin/select.cc | 9 ++++++--- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index d08e6d36a2..96e0c61fab 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,14 @@ +2004-10-26 Christopher Faylor + + * cygtls.cc (_cygtls::fixup_after_fork): Wipe out exitsock local since + it should not be used by the child. + * select.cc (start_thread_socket): Turn off inheritance for exitsock. + Don't add exitsock to exception mask since it should never get an + exception. + (socket_cleanup): Change some debug messages for consistency. + * fhandler_socket.cc (fhandler_socket::dup): Change comment wording + slightly. + 2004-10-26 Pierre Humblet * registry.cc (get_registry_hive_path): Simplify and add a diff --git a/winsup/cygwin/cygtls.cc b/winsup/cygwin/cygtls.cc index 4dcd5df8fb..6be388116e 100644 --- a/winsup/cygwin/cygtls.cc +++ b/winsup/cygwin/cygtls.cc @@ -149,6 +149,7 @@ _cygtls::fixup_after_fork () sig = 0; } stacklock = 0; + locals.exitsock = INVALID_SOCKET; wq.thread_ev = NULL; } diff --git a/winsup/cygwin/fhandler_socket.cc b/winsup/cygwin/fhandler_socket.cc index 5c85ad4130..803ba44cb1 100644 --- a/winsup/cygwin/fhandler_socket.cc +++ b/winsup/cygwin/fhandler_socket.cc @@ -352,8 +352,8 @@ fhandler_socket::dup (fhandler_base *child) debug_printf ("WSADuplicateSocket failed, trying DuplicateHandle"); } - /* We don't call fhandler_base::dup here since that requires to - have winsock called from fhandler_base and it creates only + /* We don't call fhandler_base::dup here since that requires + having winsock called from fhandler_base and it creates only inheritable sockets which is wrong for winsock2. */ HANDLE nh; diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc index 30b19f786f..a0dc1318ee 100644 --- a/winsup/cygwin/select.cc +++ b/winsup/cygwin/select.cc @@ -1371,11 +1371,14 @@ start_thread_socket (select_record *me, select_stuff *stuff) select_printf ("getsockname error"); goto err; } + if (winsock2_active && wincap.has_set_handle_information ()) + SetHandleInformation ((HANDLE) si->exitsock, HANDLE_FLAG_INHERIT, 0); + /* else + too bad? */ } select_printf ("exitsock %p", si->exitsock); WINSOCK_FD_SET ((HANDLE) si->exitsock, &si->readfds); - WINSOCK_FD_SET ((HANDLE) si->exitsock, &si->exceptfds); stuff->device_specific_socket = (void *) si; si->start = &stuff->start; select_printf ("stuff_start %p", &stuff->start); @@ -1400,11 +1403,11 @@ socket_cleanup (select_record *, select_stuff *stuff) int res = sendto (_my_tls.locals.exitsock, buf, 1, 0, (sockaddr *) &_my_tls.locals.exitsock_sin, sizeof (_my_tls.locals.exitsock_sin)); - select_printf ("sent a byte to the exit sock %p, res %d", _my_tls.locals.exitsock, res); + select_printf ("sent a byte to exitsock %p, res %d", _my_tls.locals.exitsock, res); /* Wait for thread to go away */ si->thread->detach (); /* empty the socket */ - select_printf ("reading a byte from %p", si->exitsock); + select_printf ("reading a byte from exitsock %p", si->exitsock); res = recv (si->exitsock, buf, 1, 0); select_printf ("recv returned %d", res); stuff->device_specific_socket = NULL; -- 2.11.0