OSDN Git Service

* fhandler.h (fhandler_socket::fixup_after_exec): Remove inline
authorcorinna <corinna>
Thu, 20 Sep 2001 11:29:48 +0000 (11:29 +0000)
committercorinna <corinna>
Thu, 20 Sep 2001 11:29:48 +0000 (11:29 +0000)
        implementation.
        (fhandler_dev_raw::fixup_after_exec): Ditto.
        * fhandler_raw.cc (fhandler_dev_raw::fixup_after_fork): Don't
        duplicate buffer on fork to avoid memory leak.
        (fhandler_dev_raw::fixup_after_exec): New implementation equal to
        former fixup_after_fork() implementation.
        * fhandler_socket.cc (fhandler_socket::fixup_after_fork): Do
        nothing when not using Winsock2.
        (fhandler_socket::fixup_after_exec): New implementation.
        (fhandler_socket::set_close_on_exec): Never call set_inheritance().

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler.h
winsup/cygwin/fhandler_raw.cc
winsup/cygwin/fhandler_socket.cc

index 342b152..0c09beb 100644 (file)
@@ -1,3 +1,17 @@
+Thu Sep 20 13:20:00 2001  Corinna Vinschen <corinna@vinschen.de>
+
+       * fhandler.h (fhandler_socket::fixup_after_exec): Remove inline
+       implementation.
+       (fhandler_dev_raw::fixup_after_exec): Ditto.
+       * fhandler_raw.cc (fhandler_dev_raw::fixup_after_fork): Don't
+       duplicate buffer on fork to avoid memory leak.
+       (fhandler_dev_raw::fixup_after_exec): New implementation equal to
+       former fixup_after_fork() implementation.
+       * fhandler_socket.cc (fhandler_socket::fixup_after_fork): Do
+       nothing when not using Winsock2.
+       (fhandler_socket::fixup_after_exec): New implementation.
+       (fhandler_socket::set_close_on_exec): Never call set_inheritance().
+
 Thu Sep 20  9:55:00 2001  Corinna Vinschen <corinna@vinschen.de>
 
        * fhandler.cc (fhandler_base::set_inheritance): If available,
index 1f6f839..1ab1557 100644 (file)
@@ -418,7 +418,7 @@ public:
   void set_close_on_exec (int val);
   virtual void fixup_before_fork_exec (DWORD);
   void fixup_after_fork (HANDLE);
-  void fixup_after_exec (HANDLE parent) { fixup_after_fork (parent); }
+  void fixup_after_exec (HANDLE);
 
   select_record *select_read (select_record *s);
   select_record *select_write (select_record *s);
@@ -490,7 +490,7 @@ public:
   int ioctl (unsigned int cmd, void *buf);
 
   void fixup_after_fork (HANDLE);
-  void fixup_after_exec (HANDLE parent) { fixup_after_fork (parent); }
+  void fixup_after_exec (HANDLE);
 };
 
 class fhandler_dev_floppy: public fhandler_dev_raw
index a5befb6..7ed439b 100644 (file)
@@ -468,6 +468,14 @@ fhandler_dev_raw::dup (fhandler_base *child)
 void
 fhandler_dev_raw::fixup_after_fork (HANDLE)
 {
+  devbufstart = 0;
+  devbufend = 0;
+  lastblk_to_read = 0;
+}
+
+void
+fhandler_dev_raw::fixup_after_exec (HANDLE)
+{
   if (devbufsiz > 1L)
     devbuf = new char [devbufsiz];
   devbufstart = 0;
index 9e019f9..dc76d0e 100644 (file)
@@ -202,13 +202,24 @@ fhandler_socket::fixup_after_fork (HANDLE parent)
     }
   else
     {
+#if 0
       fhandler_base::fixup_after_fork (parent);
+#endif
       debug_printf ("Without Winsock 2.0");
     }
   if (secret_event)
     fork_fixup (parent, secret_event, "secret_event");
 }
 
+void
+fhandler_socket::fixup_after_exec (HANDLE parent)
+{
+  if (!get_close_on_exec ())
+    fixup_after_fork (parent);
+  else
+    closesocket (get_socket ());
+}
+
 int
 fhandler_socket::dup (fhandler_base *child)
 {
@@ -447,9 +458,11 @@ fhandler_socket::fcntl (int cmd, void *arg)
 void
 fhandler_socket::set_close_on_exec (int val)
 {
+#if 0
   extern WSADATA wsadata;
   if (wsadata.wVersion < 512) /* < Winsock 2.0 */
     set_inheritance (get_handle (), val);
+#endif
   set_close_on_exec_flag (val);
   debug_printf ("set close_on_exec for %s to %d", get_name (), val);
 }