mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-18 13:10:17 -06:00
cmCTestMultiProcessHandler: Fix StartNextTests loop on not-started test
If `StartTestProcess` does not start a test, propagate this information back up to the `StartNextTests` loop so that it can move on to another candidate without allocating processors to a test that didn't run. Otherwise we have to wait for the next time `RunTests` loops around and calls `StartNextTests` again.
This commit is contained in:
@@ -112,7 +112,7 @@ void cmCTestMultiProcessHandler::RunTests()
|
||||
this->UpdateCostData();
|
||||
}
|
||||
|
||||
void cmCTestMultiProcessHandler::StartTestProcess(int test)
|
||||
bool cmCTestMultiProcessHandler::StartTestProcess(int test)
|
||||
{
|
||||
std::chrono::system_clock::time_point stop_time = this->CTest->GetStopTime();
|
||||
if (stop_time != std::chrono::system_clock::time_point() &&
|
||||
@@ -121,7 +121,7 @@ void cmCTestMultiProcessHandler::StartTestProcess(int test)
|
||||
"Stopping all tests."
|
||||
<< std::endl);
|
||||
this->StopTimePassed = true;
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
cmCTestOptionalLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
|
||||
@@ -155,23 +155,25 @@ void cmCTestMultiProcessHandler::StartTestProcess(int test)
|
||||
|
||||
if (testRun->StartTest(this->Total)) {
|
||||
this->RunningTests.insert(testRun);
|
||||
} else {
|
||||
|
||||
for (auto& j : this->Tests) {
|
||||
j.second.erase(test);
|
||||
}
|
||||
|
||||
this->UnlockResources(test);
|
||||
this->Completed++;
|
||||
this->TestFinishMap[test] = true;
|
||||
this->TestRunningMap[test] = false;
|
||||
this->RunningCount -= GetProcessorsUsed(test);
|
||||
testRun->EndTest(this->Completed, this->Total, false);
|
||||
if (!this->Properties[test]->Disabled) {
|
||||
this->Failed->push_back(this->Properties[test]->Name);
|
||||
}
|
||||
delete testRun;
|
||||
return true;
|
||||
}
|
||||
|
||||
for (auto& j : this->Tests) {
|
||||
j.second.erase(test);
|
||||
}
|
||||
|
||||
this->UnlockResources(test);
|
||||
this->Completed++;
|
||||
this->TestFinishMap[test] = true;
|
||||
this->TestRunningMap[test] = false;
|
||||
this->RunningCount -= GetProcessorsUsed(test);
|
||||
testRun->EndTest(this->Completed, this->Total, false);
|
||||
if (!this->Properties[test]->Disabled) {
|
||||
this->Failed->push_back(this->Properties[test]->Name);
|
||||
}
|
||||
delete testRun;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void cmCTestMultiProcessHandler::LockResources(int index)
|
||||
@@ -229,8 +231,7 @@ bool cmCTestMultiProcessHandler::StartTest(int test)
|
||||
|
||||
// if there are no depends left then run this test
|
||||
if (this->Tests[test].empty()) {
|
||||
this->StartTestProcess(test);
|
||||
return true;
|
||||
return this->StartTestProcess(test);
|
||||
}
|
||||
// This test was not able to start because it is waiting
|
||||
// on depends to run
|
||||
|
||||
@@ -75,7 +75,7 @@ protected:
|
||||
// Start the next test or tests as many as are allowed by
|
||||
// ParallelLevel
|
||||
void StartNextTests();
|
||||
void StartTestProcess(int test);
|
||||
bool StartTestProcess(int test);
|
||||
bool StartTest(int test);
|
||||
// Mark the checkpoint for the given test
|
||||
void WriteCheckpoint(int index);
|
||||
|
||||
Reference in New Issue
Block a user