From: Remi Gacogne Date: Thu, 20 May 2021 08:26:28 +0000 (+0200) Subject: auth: Convert the tinydns backend to LockGuarded X-Git-Tag: dnsdist-1.7.0-alpha1~11^2~17 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0f2f32a9a1aa6ec495cb4be011691043a9208fdf;p=thirdparty%2Fpdns.git auth: Convert the tinydns backend to LockGuarded --- diff --git a/modules/tinydnsbackend/tinydnsbackend.cc b/modules/tinydnsbackend/tinydnsbackend.cc index 0dbcf85d16..54f433b466 100644 --- a/modules/tinydnsbackend/tinydnsbackend.cc +++ b/modules/tinydnsbackend/tinydnsbackend.cc @@ -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::s_domainInfo; vector TinyDNSBackend::getLocations() { @@ -91,14 +90,13 @@ TinyDNSBackend::TinyDNSBackend(const string& suffix) void TinyDNSBackend::getUpdatedMasters(vector* retDomains) { - std::lock_guard 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 allDomains; getAllDomains(&allDomains); @@ -136,11 +134,11 @@ void TinyDNSBackend::getUpdatedMasters(vector* retDomains) void TinyDNSBackend::setNotified(uint32_t id, uint32_t serial) { - std::lock_guard 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(); 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* domains, bool include_disabled) diff --git a/modules/tinydnsbackend/tinydnsbackend.hh b/modules/tinydnsbackend/tinydnsbackend.hh index efcb2436a4..04792dffa6 100644 --- a/modules/tinydnsbackend/tinydnsbackend.hh +++ b/modules/tinydnsbackend/tinydnsbackend.hh @@ -32,7 +32,6 @@ #include #include #include -#include 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 s_domainInfo; static uint32_t s_lastId; // used to give a domain an id. };