From 433222997f8184bddd6637a782aca42fa8ab26dd Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 24 Jun 2019 13:52:42 +0100 Subject: [PATCH] Always close pipes opened for subprocess communication. Closes #1424 * We still need to close the stdout/stderr pipes even if the subprocess failed to launch, otherwise we leak the fds. --- renderdoc/os/posix/posix_process.cpp | 31 +++++++++++++++------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/renderdoc/os/posix/posix_process.cpp b/renderdoc/os/posix/posix_process.cpp index 01eedcf5c..d971a45bf 100644 --- a/renderdoc/os/posix/posix_process.cpp +++ b/renderdoc/os/posix/posix_process.cpp @@ -654,27 +654,30 @@ uint32_t Process::LaunchProcess(const char *app, const char *workingDir, const c uint32_t ret = (uint32_t)RunProcess(app, workingDir, cmdLine, currentEnvironment, result ? stdoutPipe : NULL, result ? stderrPipe : NULL); - if(ret && result) + if(result) { result->strStdout = ""; result->strStderror = ""; - ssize_t stdoutRead, stderrRead; - char chBuf[4096]; - do + if(ret) { - stdoutRead = read(stdoutPipe[0], chBuf, sizeof(chBuf)); - if(stdoutRead > 0) - result->strStdout += std::string(chBuf, stdoutRead); - } while(stdoutRead > 0); + ssize_t stdoutRead, stderrRead; + char chBuf[4096]; + do + { + stdoutRead = read(stdoutPipe[0], chBuf, sizeof(chBuf)); + if(stdoutRead > 0) + result->strStdout += std::string(chBuf, stdoutRead); + } while(stdoutRead > 0); - do - { - stderrRead = read(stderrPipe[0], chBuf, sizeof(chBuf)); - if(stderrRead > 0) - result->strStderror += std::string(chBuf, stderrRead); + do + { + stderrRead = read(stderrPipe[0], chBuf, sizeof(chBuf)); + if(stderrRead > 0) + result->strStderror += std::string(chBuf, stderrRead); - } while(stderrRead > 0); + } while(stderrRead > 0); + } // Close read ends. close(stdoutPipe[0]);