]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
auth: Convert the tinydns backend to LockGuarded
authorRemi Gacogne <remi.gacogne@powerdns.com>
Thu, 20 May 2021 08:26:28 +0000 (10:26 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Wed, 18 Aug 2021 09:34:05 +0000 (11:34 +0200)
modules/tinydnsbackend/tinydnsbackend.cc
modules/tinydnsbackend/tinydnsbackend.hh

index 0dbcf85d16541aa7507a4ba9e41026c40a404beb..54f433b46676e6e1be14dae1f190d361ef190274 100644 (file)
@@ -29,8 +29,7 @@
 
 static string backendname = "[TinyDNSBackend] ";
 uint32_t TinyDNSBackend::s_lastId;
-std::mutex TinyDNSBackend::s_domainInfoLock;
-TinyDNSBackend::TDI_suffix_t TinyDNSBackend::s_domainInfo;
+LockGuarded<TinyDNSBackend::TDI_suffix_t> TinyDNSBackend::s_domainInfo;
 
 vector<string> TinyDNSBackend::getLocations()
 {
@@ -91,14 +90,13 @@ TinyDNSBackend::TinyDNSBackend(const string& suffix)
 
 void TinyDNSBackend::getUpdatedMasters(vector<DomainInfo>* retDomains)
 {
-  std::lock_guard<std::mutex> l(s_domainInfoLock); //TODO: We could actually lock less if we do it per suffix.
-
-  if (!s_domainInfo.count(d_suffix)) {
+  auto domainInfo = s_domainInfo.lock(); //TODO: We could actually lock less if we do it per suffix.
+  if (!domainInfo->count(d_suffix)) {
     TDI_t tmp;
-    s_domainInfo.insert(make_pair(d_suffix, tmp));
+    domainInfo->insert(make_pair(d_suffix, tmp));
   }
 
-  TDI_t* domains = &s_domainInfo[d_suffix];
+  TDI_t* domains = &(*domainInfo)[d_suffix];
 
   vector<DomainInfo> allDomains;
   getAllDomains(&allDomains);
@@ -136,11 +134,11 @@ void TinyDNSBackend::getUpdatedMasters(vector<DomainInfo>* retDomains)
 
 void TinyDNSBackend::setNotified(uint32_t id, uint32_t serial)
 {
-  std::lock_guard<std::mutex> l(s_domainInfoLock);
-  if (!s_domainInfo.count(d_suffix)) {
+  auto domainInfo = s_domainInfo.lock();
+  if (!domainInfo->count(d_suffix)) {
     throw PDNSException("Can't get list of domains to set the serial.");
   }
-  TDI_t* domains = &s_domainInfo[d_suffix];
+  TDI_t* domains = &(*domainInfo)[d_suffix];
   TDIById_t& domain_index = domains->get<tag_domainid>();
   TDIById_t::iterator itById = domain_index.find(id);
   if (itById == domain_index.end()) {
@@ -150,7 +148,7 @@ void TinyDNSBackend::setNotified(uint32_t id, uint32_t serial)
     DLOG(g_log << Logger::Debug << backendname << "Setting serial for " << itById->zone << " to " << serial << endl);
     domain_index.modify(itById, TDI_SerialModifier(serial));
   }
-  s_domainInfo[d_suffix] = *domains;
+  (*domainInfo)[d_suffix] = *domains;
 }
 
 void TinyDNSBackend::getAllDomains(vector<DomainInfo>* domains, bool include_disabled)
index efcb2436a4e88ee11963b99fb89de0face651d92..04792dffa66237717c84a305f6e917a0f4384975 100644 (file)
@@ -32,7 +32,6 @@
 #include <boost/multi_index_container.hpp>
 #include <boost/multi_index/hashed_index.hpp>
 #include <boost/multi_index/member.hpp>
-#include <mutex>
 
 using namespace ::boost;
 using namespace ::boost::multi_index;
@@ -110,7 +109,6 @@ private:
   string d_suffix;
 
   // Statics
-  static std::mutex s_domainInfoLock;
-  static TDI_suffix_t s_domainInfo;
+  static LockGuarded<TDI_suffix_t> s_domainInfo;
   static uint32_t s_lastId; // used to give a domain an id.
 };