CTest: Fix regression in build-and-test timeout compuatation

Refactoring in commit 66419bc046 (CTest: convert timeouts to
std::chrono::duration, 2017-11-20) accidentally changed the logic used
to compute the timeout for a test when it starts.  It incorrectly limits
the maximum possible timeout to 2 minutes rather than 2 minutes less
than the total allowed test time remaining.  Update the new logic to
restore the original behavior.

Avoid subtracting 2 minutes from our "infinite" timeout value to avoid
creating very large timeouts that are not "infinite" and may exceed
integer type ranges.
This commit is contained in:
Brad King
2017-12-08 07:04:36 -05:00
parent be4702781d
commit e770b1b86e

View File

@@ -1089,9 +1089,10 @@ int cmCTest::RunTest(std::vector<const char*> argv, std::string* output,
bool modifyEnv = (environment && !environment->empty());
// determine how much time we have
std::chrono::duration<double> timeout =
std::min<std::chrono::duration<double>>(this->GetRemainingTimeAllowed(),
std::chrono::minutes(2));
std::chrono::duration<double> timeout = this->GetRemainingTimeAllowed();
if (timeout != std::chrono::duration<double>::max()) {
timeout -= std::chrono::minutes(2);
}
if (this->TimeOut > std::chrono::duration<double>::zero() &&
this->TimeOut < timeout) {
timeout = this->TimeOut;