From: Remi Gacogne Date: Fri, 4 Jun 2021 15:28:01 +0000 (+0200) Subject: auth: Convert Stub resolver to SharedLockGuarded X-Git-Tag: dnsdist-1.7.0-alpha1~11^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=128f72484420b67e97b2159f394d60af8ca4c601;p=thirdparty%2Fpdns.git auth: Convert Stub resolver to SharedLockGuarded --- diff --git a/pdns/stubresolver.cc b/pdns/stubresolver.cc index 4b3a47ab7a..e02300c41f 100644 --- a/pdns/stubresolver.cc +++ b/pdns/stubresolver.cc @@ -22,8 +22,7 @@ // s_resolversForStub contains the ComboAddresses that are used by // stubDoResolve -static vector s_resolversForStub; -static ReadWriteLock s_resolversForStubLock; +static SharedLockGuarded> s_resolversForStub; static bool s_stubResolvConfigured = false; // /etc/resolv.conf last modification time @@ -37,8 +36,7 @@ static string logPrefix = "[stub-resolver] "; */ bool resolversDefined() { - ReadLock l(&s_resolversForStubLock); - if (s_resolversForStub.empty()) { + if (s_resolversForStub.read_lock()->empty()) { g_log<& resolversForStub, const time_t& now) { struct stat st; s_localResolvConfLastCheck = now; @@ -63,7 +61,7 @@ static void parseLocalResolvConf_locked(const time_t& now) return; } - s_resolversForStub = std::move(resolvers); + resolversForStub = std::move(resolvers); } } } @@ -74,8 +72,7 @@ static void parseLocalResolvConf() if ((s_localResolvConfLastCheck + LOCAL_RESOLV_CONF_MAX_CHECK_INTERVAL) > now) return ; - WriteLock wl(&s_resolversForStubLock); - parseLocalResolvConf_locked(now); + parseLocalResolvConf_locked(*(s_resolversForStub.write_lock()), now); } @@ -90,14 +87,14 @@ static void parseLocalResolvConf() void stubParseResolveConf() { if(::arg().mustDo("resolver")) { - WriteLock wl(&s_resolversForStubLock); + auto resolversForStub = s_resolversForStub.write_lock(); vector parts; stringtok(parts, ::arg()["resolver"], " ,\t"); for (const auto& addr : parts) - s_resolversForStub.push_back(ComboAddress(addr, 53)); + resolversForStub->push_back(ComboAddress(addr, 53)); } - if (s_resolversForStub.empty()) { + if (s_resolversForStub.read_lock()->empty()) { parseLocalResolvConf(); } // Emit a warning if there are no stubs. @@ -119,7 +116,7 @@ int stubDoResolve(const DNSName& qname, uint16_t qtype, vector& r if (!resolversDefined()) return RCode::ServFail; - ReadLock l(&s_resolversForStubLock); + auto resolversForStub = s_resolversForStub.read_lock(); vector packet; DNSPacketWriter pw(packet, qname, qtype); @@ -128,12 +125,12 @@ int stubDoResolve(const DNSName& qname, uint16_t qtype, vector& r string queryNameType = qname.toString() + "|" + QType(qtype).toString(); string msg ="Doing stub resolving for '" + queryNameType + "', using resolvers: "; - for (const auto& server : s_resolversForStub) { + for (const auto& server : *resolversForStub) { msg += server.toString() + ", "; } g_log<