Просмотр исходного кода

BUG: Do not close stdout/stderr pipes in parent if they are shared.

Brad King 21 лет назад
Родитель
Сommit
8567e7d0bc
2 измененных файлов с 13 добавлено и 4 удалено
  1. 8 2
      Source/kwsys/ProcessUNIX.c
  2. 5 2
      Source/kwsys/ProcessWin32.c

+ 8 - 2
Source/kwsys/ProcessUNIX.c

@@ -689,7 +689,10 @@ void kwsysProcess_Execute(kwsysProcess* cp)
   }
 
   /* The parent process does not need the output pipe write ends.  */
-  kwsysProcessCleanupDescriptor(&si.StdErr);
+  if(si.StdErr != 2)
+    {
+    kwsysProcessCleanupDescriptor(&si.StdErr);
+    }
   kwsysProcessCleanupDescriptor(&si.TermPipe);
 
   /* Restore the working directory. */
@@ -1395,7 +1398,10 @@ static int kwsysProcessCreate(kwsysProcess* cp, int prIndex,
     }
 
   /* The parent process does not need the output pipe write ends.  */
-  kwsysProcessCleanupDescriptor(&si->StdOut);
+  if(si->StdOut != 1)
+    {
+    kwsysProcessCleanupDescriptor(&si->StdOut);
+    }
 
   return 1;
 }

+ 5 - 2
Source/kwsys/ProcessWin32.c

@@ -1160,7 +1160,7 @@ void kwsysProcess_Execute(kwsysProcess* cp)
         {
         kwsysProcessCleanupHandle(&si.StartupInfo.hStdOutput);
         }
-      if(si.StartupInfo.hStdOutput != GetStdHandle(STD_ERROR_HANDLE))
+      if(si.StartupInfo.hStdError != GetStdHandle(STD_ERROR_HANDLE))
         {
         kwsysProcessCleanupHandle(&si.StartupInfo.hStdError);
         }
@@ -1176,7 +1176,10 @@ void kwsysProcess_Execute(kwsysProcess* cp)
 
   /* Close the inherited handles to the stderr pipe shared by all
      processes in the pipeline.  */
-  kwsysProcessCleanupHandle(&si.StartupInfo.hStdError);
+  if(si.StartupInfo.hStdError != GetStdHandle(STD_ERROR_HANDLE))
+    {
+    kwsysProcessCleanupHandle(&si.StartupInfo.hStdError);
+    }
 
   /* Restore the working directory.  */
   if(cp->RealWorkingDirectory)