diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-10-22 22:16:17 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-10-22 22:16:17 +0000 |
commit | 8201ebd40b0270eb6d36ff95dc69fb5ca6bae1db (patch) | |
tree | 5464d7786b77e36989d044c380759df0c0ddebb4 | |
parent | 71a5c22c2b635ea903c3ae7d2695ca649b38726f (diff) | |
download | external_llvm-8201ebd40b0270eb6d36ff95dc69fb5ca6bae1db.zip external_llvm-8201ebd40b0270eb6d36ff95dc69fb5ca6bae1db.tar.gz external_llvm-8201ebd40b0270eb6d36ff95dc69fb5ca6bae1db.tar.bz2 |
Use 'waitpid' instead of 'wait'. Basing Program::Wait() on 'wait()' prevents it being correct within a multithreaded context.
This address: PR 5277 (Program::Wait is unsafe to call from multiple threads).
Note: If waitpid() turns out to be non-portable, we can add more autoconf magic, or look into
another solution.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@84903 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/System/Unix/Program.inc | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/System/Unix/Program.inc b/lib/System/Unix/Program.inc index 56dea25..c52f3a88 100644 --- a/lib/System/Unix/Program.inc +++ b/lib/System/Unix/Program.inc @@ -244,7 +244,7 @@ Program::Wait(unsigned secondsToWait, int status; uint64_t pid = reinterpret_cast<uint64_t>(Data_); pid_t child = static_cast<pid_t>(pid); - while (wait(&status) != child) + while (waitpid(pid, &status, 0) != child) if (secondsToWait && errno == EINTR) { // Kill the child. kill(child, SIGKILL); |