]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
auth LUA records: we only need one IsUpOracle checker thread
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>
Tue, 27 Sep 2022 11:25:33 +0000 (13:25 +0200)
(cherry picked from commit 37f625b0af0b5e818de97b83dd96709df118ad6b)

pdns/lua-record.cc

index 3571facf89b613c8ac6d79fd4037f65d8912f221..19bcb6ac539ad46b56ec99cdb5e3b82cced30e2a 100644 (file)
@@ -74,7 +74,7 @@ private:
   };
 
 public:
-  IsUpOracle()
+  IsUpOracle(): d_checkerThreadStarted(ATOMIC_FLAG_INIT)
   {
   }
   ~IsUpOracle()
@@ -201,6 +201,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)
   {
@@ -238,7 +239,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);