From dedbe255d32ace4b92fbe099aea454775701edf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Fri, 2 Nov 2001 23:59:11 +0000 Subject: Patch #474169: Move fdopen calls out of critical section. --- Modules/posixmodule.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 65e09c0..20765e1 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -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 */ -- cgit v0.12