cmCTestRunTest: Adopt decision for starting cmProcess timer

This commit is contained in:
Brad King
2023-05-04 16:51:31 -04:00
parent 59336b29bd
commit 426e38cc10
3 changed files with 11 additions and 9 deletions

View File

@@ -770,7 +770,11 @@ bool cmCTestRunTest::ForkProcess(cmDuration testTimeOut)
<< "\n",
this->TestHandler->GetQuiet());
this->TestProcess->SetTimeout(timeout);
// An explicit TIMEOUT=0 test property means "no timeout".
if (timeout != cmDuration::zero() ||
!this->TestProperties->ExplicitTimeout) {
this->TestProcess->SetTimeout(timeout);
}
cmSystemTools::SaveRestoreEnvironment sre;
std::ostringstream envMeasurement;

View File

@@ -13,7 +13,6 @@
#include "cmCTest.h"
#include "cmCTestRunTest.h"
#include "cmCTestTestHandler.h"
#include "cmGetPipes.h"
#include "cmStringAlgorithms.h"
#if defined(_WIN32)
@@ -26,7 +25,6 @@ cmProcess::cmProcess(std::unique_ptr<cmCTestRunTest> runner)
: Runner(std::move(runner))
, Conv(cmProcessOutput::UTF8, CM_PROCESS_BUF_SIZE)
{
this->Timeout = cmDuration::zero();
this->TotalTime = cmDuration::zero();
this->ExitValue = 0;
this->Id = 0;
@@ -152,11 +150,9 @@ bool cmProcess::StartProcess(uv_loop_t& loop, std::vector<size_t>* affinity)
void cmProcess::StartTimer()
{
auto* properties = this->Runner->GetTestProperties();
auto msec =
std::chrono::duration_cast<std::chrono::milliseconds>(this->Timeout);
if (msec != std::chrono::milliseconds(0) || !properties->ExplicitTimeout) {
if (this->Timeout) {
auto msec =
std::chrono::duration_cast<std::chrono::milliseconds>(*this->Timeout);
this->Timer.start(&cmProcess::OnTimeoutCB,
static_cast<uint64_t>(msec.count()), 0);
}

View File

@@ -12,6 +12,8 @@
#include <utility>
#include <vector>
#include <cm/optional>
#include <cm3p/uv.h>
#include "cmDuration.h"
@@ -76,7 +78,7 @@ public:
}
private:
cmDuration Timeout;
cm::optional<cmDuration> Timeout;
std::chrono::steady_clock::time_point StartTime;
cmDuration TotalTime;
bool ReadHandleClosed = false;