fhandler_socket::dup

Pierre A. Humblet Pierre.Humblet@ieee.org
Wed Mar 12 05:27:00 GMT 2003


At 04:20 PM 3/11/2003 +0100, Corinna Vinschen wrote:

>> > I'm seriously concidering to remove all the fixup_before/fixup_after
>> > from fhandler_socket::dup() and just call fhandler_base::dup() on
>> > NT systems.

Corinna,

I like that and I have pushed the logic to also do it on Win9X, without
apparent bad effects. I just delivered 140 e-mails from a WinME to an exim 
server on Win98, ran inetd, ssh, etc... I also tried duping a socket after a 
fork, it worked fine.

The change to the fixup_before/after approach was in Oct 2000. I didn't find
any explanation of the reason for the change in the mail archives around that 
date.

There is no need to include this patch in 1.3.21. I'd like to test it for
a longer period. I hope there are others out there still running the cvs
version and the snapshots on Win9X.

Pierre


2003-03-12  Pierre Humblet  <pierre.humblet@ieee.org>

	* fhandler_socket.cc (fhandler_socket::dup): Always use DuplicateHandle.


Index: fhandler_socket.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/fhandler_socket.cc,v
retrieving revision 1.88
diff -u -p -r1.88 fhandler_socket.cc
--- fhandler_socket.cc  11 Mar 2003 16:49:58 -0000      1.88
+++ fhandler_socket.cc  12 Mar 2003 04:10:22 -0000
@@ -381,25 +381,10 @@ fhandler_socket::dup (fhandler_base *chi
   debug_printf ("here");
   fhandler_socket *fhs = (fhandler_socket *) child;
   fhs->addr_family = addr_family;
-  fhs->set_io_handle (get_io_handle ());
   if (get_addr_family () == AF_LOCAL)
     fhs->set_sun_path (get_sun_path ());
   fhs->set_socket_type (get_socket_type ());
 
-  /* Using WinSock2 methods for dup'ing sockets seem to collide
-     with user context switches under... some... conditions.  So we
-     drop this for NT systems at all and return to the good ol'
-     DuplicateHandle way of life.  This worked fine all the time on
-     NT anyway and it's even a bit faster. */
-  if (!wincap.has_security ())
-    {
-      fhs->fixup_before_fork_exec (GetCurrentProcessId ());
-      if (winsock2_active)
-       {
-         fhs->fixup_after_fork (hMainProc);
-         return get_io_handle () == (HANDLE) INVALID_SOCKET;
-       }
-    }
   /* We don't call fhandler_base::dup here since that requires to
      have winsock called from fhandler_base and it creates only
      inheritable sockets which is wrong for winsock2. */



More information about the Cygwin-patches mailing list