]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Convert remaining Action mutexes to LockGuarded
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 7 May 2021 09:10:33 +0000 (11:10 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 17 Aug 2021 12:04:46 +0000 (14:04 +0200)
pdns/dnsdist-lua-actions.cc

index 236bd28fee201b00d733ed43394024d09be3d14d..b5c070396729512173cc302a5de5460c4e4b649d 100644 (file)
@@ -83,13 +83,12 @@ public:
 class QPSAction : public DNSAction
 {
 public:
-  QPSAction(int limit) : d_qps(limit, limit)
+  QPSAction(int limit) : d_qps(QPSLimiter(limit, limit))
   {
   }
   DNSAction::Action operator()(DNSQuestion* dq, std::string* ruleresult) const override
   {
-    std::lock_guard<decltype(d_lock)> guard(d_lock);
-    if (d_qps.check()) {
+    if (d_qps.lock()->check()) {
       return Action::None;
     }
     else {
@@ -98,11 +97,10 @@ public:
   }
   std::string toString() const override
   {
-    return "qps limit to "+std::to_string(d_qps.getRate());
+    return "qps limit to "+std::to_string(d_qps.lock()->getRate());
   }
 private:
-  mutable std::mutex d_lock;
-  QPSLimiter d_qps;
+  mutable LockGuarded<QPSLimiter> d_qps;
 };
 
 class DelayAction : public DNSAction
@@ -293,11 +291,10 @@ private:
 class QPSPoolAction : public DNSAction
 {
 public:
-  QPSPoolAction(unsigned int limit, const std::string& pool) : d_qps(limit, limit), d_pool(pool) {}
+  QPSPoolAction(unsigned int limit, const std::string& pool) : d_qps(QPSLimiter(limit, limit)), d_pool(pool) {}
   DNSAction::Action operator()(DNSQuestion* dq, std::string* ruleresult) const override
   {
-    std::lock_guard<decltype(d_lock)> guard(d_lock);
-    if (d_qps.check()) {
+    if (d_qps.lock()->check()) {
       *ruleresult = d_pool;
       return Action::Pool;
     }
@@ -307,13 +304,12 @@ public:
   }
   std::string toString() const override
   {
-    return "max " +std::to_string(d_qps.getRate())+" to pool "+d_pool;
+    return "max " +std::to_string(d_qps.lock()->getRate())+" to pool "+d_pool;
   }
 
 private:
-  mutable std::mutex d_lock;
-  QPSLimiter d_qps;
-  std::string d_pool;
+  mutable LockGuarded<QPSLimiter> d_qps;
+  const std::string d_pool;
 };
 
 class RCodeAction : public DNSAction