Bladeren bron

cmCTestRunTest: Adopt decision for starting cmProcess timer

Brad King 2 jaren geleden
bovenliggende
commit
426e38cc10
3 gewijzigde bestanden met toevoegingen van 11 en 9 verwijderingen
  1. 5 1
      Source/CTest/cmCTestRunTest.cxx
  2. 3 7
      Source/CTest/cmProcess.cxx
  3. 3 1
      Source/CTest/cmProcess.h

+ 5 - 1
Source/CTest/cmCTestRunTest.cxx

@@ -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;

+ 3 - 7
Source/CTest/cmProcess.cxx

@@ -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);
   }

+ 3 - 1
Source/CTest/cmProcess.h

@@ -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;