OSDN Git Service

* fhandler.cc (fhandler_base::set_inheritance): Just use DUPLICATE_CLOSE_SOURCE
authorcgf <cgf>
Thu, 20 Sep 2001 20:58:29 +0000 (20:58 +0000)
committercgf <cgf>
Thu, 20 Sep 2001 20:58:29 +0000 (20:58 +0000)
to change inheritance.  Eliminate all other logic dealing with closed handles.
* fhandler.h (fhandler_base::set_inheritance): Reflect above change.
* fhandler_tty.cc (fhandler_tty_common::set_close_on_exec): Ditto.

winsup/cygwin/ChangeLog
winsup/cygwin/child_info.h
winsup/cygwin/fhandler.cc
winsup/cygwin/fhandler.h
winsup/cygwin/fhandler_tty.cc

index ecf7b8a..0935486 100644 (file)
@@ -1,3 +1,11 @@
+Thu Sep 20 16:48:44 2001  Christopher Faylor <cgf@cygnus.com>
+
+       * fhandler.cc (fhandler_base::set_inheritance): Just use
+       DUPLICATE_CLOSE_SOURCE to change inheritance.  Eliminate all other
+       logic dealing with closed handles.
+       * fhandler.h (fhandler_base::set_inheritance): Reflect above change.
+       * fhandler_tty.cc (fhandler_tty_common::set_close_on_exec): Ditto.
+
 Thu Sep 20 13:34:00 2001  Corinna Vinschen <corinna@vinschen.de>
 
        * fhandler_socket.cc (fhandler_socket::fixup_after_exec): Close
index 68d1751..9836758 100644 (file)
@@ -29,7 +29,7 @@ enum
 class child_info
 {
 public:
-  DWORD zero[1];       // must be zeroed
+  DWORD zero[4];       // must be zeroed
   DWORD cb;            // size of this record
   DWORD type;          // type of record
   int cygpid;          // cygwin pid of child process
index 0f38e02..ff39465 100644 (file)
@@ -1510,44 +1510,18 @@ fhandler_pipe::lseek (off_t offset, int whence)
   return -1;
 }
 
-#ifdef DEBUGGING
-#define nameparm name
-#else
-#define nameparm
-#endif
-
 void
-fhandler_base::set_inheritance (HANDLE &h, int not_inheriting, const char *nameparm)
-#undef nameparm
+fhandler_base::set_inheritance (HANDLE &h, int not_inheriting)
 {
-  HANDLE newh;
-
-  if (wincap.has_set_handle_information () && (!is_console () ||
-      wincap.has_set_handle_information_on_console_handles ()))
-    (void) SetHandleInformation (h, HANDLE_FLAG_INHERIT,
-                                not_inheriting ? 0 : HANDLE_FLAG_INHERIT);
-  else if (!DuplicateHandle (hMainProc, h, hMainProc, &newh, 0, !not_inheriting,
-                            DUPLICATE_SAME_ACCESS))
-    debug_printf ("DuplicateHandle %E");
-#ifndef DEBUGGING
-  else
-    {
-      hclose (h);
-      h = newh;
-    }
-#else
-  else if (!name)
-    {
-      hclose (h);
-      h = newh;
-    }
-  else
-  /* FIXME: This won't work with sockets */
-    {
-      ForceCloseHandle2 (h, name);
-      h = newh;
-      ProtectHandle2 (h, name);
-    }
+  /* Note that we could use SetHandleInformation here but it is not available
+     on all platforms.  Test cases seem to indicate that using DuplicateHandle
+     in this fashion does not actually close the original handle, which is
+     what we want.  If this changes in the future, we may be forced to use
+     SetHandleInformation on newer OS's */
+  if (!DuplicateHandle (hMainProc, h, hMainProc, &h, 0, !not_inheriting,
+                            DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE))
+    debug_printf ("DuplicateHandle failed, %E");
+#ifdef DEBUGGING
   setclexec_pid (h, not_inheriting);
 #endif
 }
index 1ab1557..94c623f 100644 (file)
@@ -310,8 +310,7 @@ public:
   unsigned long get_namehash () { return namehash; }
 
   virtual void hclose (HANDLE h) {CloseHandle (h);}
-  virtual void set_inheritance (HANDLE &h, int not_inheriting,
-                               const char *name = NULL);
+  virtual void set_inheritance (HANDLE &h, int not_inheriting);
 
   /* fixup fd possibly non-inherited handles after fork */
   void fork_fixup (HANDLE parent, HANDLE &h, const char *name);
index b0ee336..4aa3b05 100644 (file)
@@ -1119,7 +1119,7 @@ fhandler_tty_common::set_close_on_exec (int val)
   /* FIXME: This is a duplication from fhandler_base::set_close_on_exec.
      It is here because we need to specify the "from_pty" stuff here or
      we'll get warnings from ForceCloseHandle when debugging. */
-  set_inheritance (get_io_handle (), val, "from_pty");
+  set_inheritance (get_io_handle (), val);
   set_close_on_exec_flag (val);
 #endif
   if (output_done_event)
@@ -1130,10 +1130,10 @@ fhandler_tty_common::set_close_on_exec (int val)
     set_inheritance (ioctl_done_event, val);
   if (inuse)
     set_inheritance (inuse, val);
-  set_inheritance (output_mutex, val, "output_mutex");
-  set_inheritance (input_mutex, val, "input_mutex");
+  set_inheritance (output_mutex, val);
+  set_inheritance (input_mutex, val);
   set_inheritance (input_available_event, val);
-  set_inheritance (output_handle, val, "to_pty");
+  set_inheritance (output_handle, val);
 }
 
 void