CTest: Fix regression in 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-07 07:14:38 -05:00
parent 66419bc046
commit be4702781d

View File

@ -18,7 +18,6 @@
#include "cmsys/Base64.h"
#include "cmsys/Process.h"
#include "cmsys/RegularExpression.hxx"
#include <algorithm>
#include <chrono>
#include <iomanip>
#include <sstream>
@ -686,8 +685,10 @@ bool cmCTestRunTest::ForkProcess(std::chrono::duration<double> testTimeOut,
// determine how much time we have
std::chrono::duration<double> timeout =
std::min<std::chrono::duration<double>>(
this->CTest->GetRemainingTimeAllowed(), std::chrono::minutes(2));
this->CTest->GetRemainingTimeAllowed();
if (timeout != std::chrono::duration<double>::max()) {
timeout -= std::chrono::minutes(2);
}
if (this->CTest->GetTimeOut() > std::chrono::duration<double>::zero() &&
this->CTest->GetTimeOut() < timeout) {
timeout = this->CTest->GetTimeOut();