mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-25 12:50:00 +00:00
Fix the behavior of ExecuteAndWait with a non-zero timeout.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@209951 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c3648ce2dc
commit
bfe17408a9
@ -34,7 +34,8 @@ int sys::ExecuteAndWait(StringRef Program, const char **args, const char **envp,
|
||||
if (Execute(PI, Program, args, envp, redirects, memoryLimit, ErrMsg)) {
|
||||
if (ExecutionFailed)
|
||||
*ExecutionFailed = false;
|
||||
ProcessInfo Result = Wait(PI, secondsToWait, true, ErrMsg);
|
||||
ProcessInfo Result = Wait(
|
||||
PI, secondsToWait, /*WaitUntilTerminates=*/secondsToWait == 0, ErrMsg);
|
||||
return Result.ReturnCode;
|
||||
}
|
||||
|
||||
|
@ -162,6 +162,36 @@ TEST(ProgramTest, TestExecuteNoWait) {
|
||||
ASSERT_GT(LoopCount, 1u) << "LoopCount should be >1";
|
||||
}
|
||||
|
||||
TEST(ProgramTest, TestExecuteAndWaitTimeout) {
|
||||
using namespace llvm::sys;
|
||||
|
||||
if (getenv("LLVM_PROGRAM_TEST_TIMEOUT")) {
|
||||
sleep_for(/*seconds*/ 10);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
std::string Executable =
|
||||
sys::fs::getMainExecutable(TestMainArgv0, &ProgramTestStringArg1);
|
||||
const char *argv[] = {
|
||||
Executable.c_str(),
|
||||
"--gtest_filter=ProgramTest.TestExecuteAndWaitTimeout",
|
||||
0
|
||||
};
|
||||
|
||||
// Add LLVM_PROGRAM_TEST_TIMEOUT to the environment of the child.
|
||||
std::vector<const char *> envp;
|
||||
CopyEnvironment(envp);
|
||||
envp.push_back("LLVM_PROGRAM_TEST_TIMEOUT=1");
|
||||
envp.push_back(0);
|
||||
|
||||
std::string Error;
|
||||
bool ExecutionFailed;
|
||||
int RetCode =
|
||||
ExecuteAndWait(Executable, argv, &envp[0], 0, /*secondsToWait=*/1, 0,
|
||||
&Error, &ExecutionFailed);
|
||||
ASSERT_EQ(-2, RetCode);
|
||||
}
|
||||
|
||||
TEST(ProgramTest, TestExecuteNegative) {
|
||||
std::string Executable = "i_dont_exist";
|
||||
const char *argv[] = { Executable.c_str(), 0 };
|
||||
|
Loading…
Reference in New Issue
Block a user