]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
auth LUA records: we only need one IsUpOracle checker thread 11929/head
authorPeter van Dijk <peter.van.dijk@powerdns.com>
Sun, 11 Sep 2022 11:31:02 +0000 (13:31 +0200)
committerPeter van Dijk <peter.van.dijk@powerdns.com>
Sun, 11 Sep 2022 11:31:22 +0000 (13:31 +0200)
pdns/lua-record.cc

index 16ad0b9e701d23df599d0c099b58c3290df13b87..c13373b79f60ccb9b2b4a0c1649a9f69a396839b 100644 (file)
@@ -76,7 +76,7 @@ private:
   };
 
 public:
-  IsUpOracle()
+  IsUpOracle(): d_checkerThreadStarted(ATOMIC_FLAG_INIT)
   {
   }
   ~IsUpOracle()
@@ -203,6 +203,7 @@ private:
   SharedLockGuarded<statuses_t> d_statuses;
 
   std::unique_ptr<std::thread> d_checkerThread;
+  std::atomic_flag d_checkerThreadStarted;
 
   void setStatus(const CheckDesc& cd, bool status)
   {
@@ -240,7 +241,7 @@ private:
 
 bool IsUpOracle::isUp(const CheckDesc& cd)
 {
-  if (!d_checkerThread) {
+  if (!d_checkerThreadStarted.test_and_set()) {
     d_checkerThread = std::make_unique<std::thread>([this] { return checkThread(); });
   }
   time_t now = time(nullptr);