]> granicus.if.org Git - python/commitdiff
Patch #474169: Move fdopen calls out of critical section.
authorMartin v. Löwis <martin@v.loewis.de>
Fri, 2 Nov 2001 23:59:11 +0000 (23:59 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Fri, 2 Nov 2001 23:59:11 +0000 (23:59 +0000)
Modules/posixmodule.c

index 65e09c02581e3ca83ed7ee041a3f935cbc4c7048..20765e199b0feb55d280bc639e5b15c416995ebe 100644 (file)
@@ -2274,13 +2274,15 @@ popen(const char *command, const char *mode, int pipesize, int *err)
         if (dup2(whan, 1) == 0) {      /* Connect STDOUT to Pipe Write Side */
             DosClose(whan);            /* Close Now-Unused Pipe Write Handle */
 
-            if (async_system(command) == NO_ERROR)
-                retfd = fdopen(rhan, mode); /* And Return Pipe Read Handle */
+            rc = async_system(command);
         }
 
         dup2(oldfd, 1);          /* Reconnect STDOUT to Original Handle */
         DosExitCritSec();        /* Now Allow Other Threads to Run */
 
+        if (rc == NO_ERROR)
+            retfd = fdopen(rhan, mode); /* And Return Pipe Read Handle */
+
         close(oldfd);            /* And Close Saved STDOUT Handle */
         return retfd;            /* Return fd of Pipe or NULL if Error */
 
@@ -2293,13 +2295,15 @@ popen(const char *command, const char *mode, int pipesize, int *err)
         if (dup2(rhan, 0) == 0)     { /* Connect STDIN to Pipe Read Side */
             DosClose(rhan);           /* Close Now-Unused Pipe Read Handle */
 
-            if (async_system(command) == NO_ERROR)
-                retfd = fdopen(whan, mode); /* And Return Pipe Write Handle */
+            rc = async_system(command);
         }
 
         dup2(oldfd, 0);          /* Reconnect STDIN to Original Handle */
         DosExitCritSec();        /* Now Allow Other Threads to Run */
 
+        if (rc == NO_ERROR)
+            retfd = fdopen(whan, mode); /* And Return Pipe Write Handle */
+
         close(oldfd);            /* And Close Saved STDIN Handle */
         return retfd;            /* Return fd of Pipe or NULL if Error */