OSDN Git Service

* pinfo.cc (_pinfo::dup_proc_pipe): Can't close proc pipe when execing or we
authorcgf <cgf>
Tue, 4 Jan 2005 14:57:42 +0000 (14:57 +0000)
committercgf <cgf>
Tue, 4 Jan 2005 14:57:42 +0000 (14:57 +0000)
will suffer an exit code race.

winsup/cygwin/ChangeLog
winsup/cygwin/pinfo.cc

index 21f9f42..9d0215c 100644 (file)
@@ -1,3 +1,8 @@
+2005-01-03  Christopher Faylor  <cgf@timesys.com>
+
+       * pinfo.cc (_pinfo::dup_proc_pipe): Can't close proc pipe when execing
+       or we will suffer an exit code race.
+
 2005-01-03  Corinna Vinschen  <corinna@vinschen.de>
 
        * signal.cc (abort): Call _GLOBAL_REENT's __cleanup.
index d600b58..8ebc602 100644 (file)
@@ -764,9 +764,14 @@ proc_waiter (void *arg)
 bool
 _pinfo::dup_proc_pipe (HANDLE hProcess)
 {
+  DWORD flags = DUPLICATE_SAME_ACCESS;
+  /* Grr.  Can't set DUPLICATE_CLOSE_SOURCE for exec case because we could be
+     execing a non-cygwin process and we need to set the exit value before the
+     parent sees it.  */
+  if (this != myself)
+    flags |= DUPLICATE_CLOSE_SOURCE;
   bool res = DuplicateHandle (hMainProc, wr_proc_pipe, hProcess, &wr_proc_pipe,
-                             0, FALSE,
-                             DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);
+                             0, FALSE, flags);
   if (!res)
     sigproc_printf ("DuplicateHandle failed, pid %d, hProcess %p, %E", pid, hProcess);
   else