summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2004-10-26 21:13:50 +0000
committerChristopher Faylor <me@cgf.cx>2004-10-26 21:13:50 +0000
commit5957d504f0da6ed6614bbb790b79d1224f4b639d (patch)
tree9820b4036e244aa4ec86cb6ffa171ead3d8444a9
parent3d43992262f596388dbd1fa6b1193916be97b25a (diff)
downloadcygnal-5957d504f0da6ed6614bbb790b79d1224f4b639d.tar.gz
cygnal-5957d504f0da6ed6614bbb790b79d1224f4b639d.tar.bz2
cygnal-5957d504f0da6ed6614bbb790b79d1224f4b639d.zip
* 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.
-rw-r--r--winsup/cygwin/ChangeLog11
-rw-r--r--winsup/cygwin/cygtls.cc1
-rw-r--r--winsup/cygwin/fhandler_socket.cc4
-rw-r--r--winsup/cygwin/select.cc9
4 files changed, 20 insertions, 5 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index d08e6d36a..96e0c61fa 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,14 @@
+2004-10-26 Christopher Faylor <cgf@timesys.com>
+
+ * 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 <pierre.humblet@ieee.org>
* registry.cc (get_registry_hive_path): Simplify and add a
diff --git a/winsup/cygwin/cygtls.cc b/winsup/cygwin/cygtls.cc
index 4dcd5df8f..6be388116 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 5c85ad413..803ba44cb 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 30b19f786..a0dc1318e 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;