mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-21 02:24:22 +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:
@ -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 (Execute(PI, Program, args, envp, redirects, memoryLimit, ErrMsg)) {
|
||||||
if (ExecutionFailed)
|
if (ExecutionFailed)
|
||||||
*ExecutionFailed = false;
|
*ExecutionFailed = false;
|
||||||
ProcessInfo Result = Wait(PI, secondsToWait, true, ErrMsg);
|
ProcessInfo Result = Wait(
|
||||||
|
PI, secondsToWait, /*WaitUntilTerminates=*/secondsToWait == 0, ErrMsg);
|
||||||
return Result.ReturnCode;
|
return Result.ReturnCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,6 +162,36 @@ TEST(ProgramTest, TestExecuteNoWait) {
|
|||||||
ASSERT_GT(LoopCount, 1u) << "LoopCount should be >1";
|
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) {
|
TEST(ProgramTest, TestExecuteNegative) {
|
||||||
std::string Executable = "i_dont_exist";
|
std::string Executable = "i_dont_exist";
|
||||||
const char *argv[] = { Executable.c_str(), 0 };
|
const char *argv[] = { Executable.c_str(), 0 };
|
||||||
|
Reference in New Issue
Block a user