From: Remi Gacogne Date: Fri, 4 Jun 2021 15:27:43 +0000 (+0200) Subject: Convert dnssecsigner to SharedLockGuarded X-Git-Tag: dnsdist-1.7.0-alpha1~11^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4f4b8ed89e1171b42640960c85a562bc257487d5;p=thirdparty%2Fpdns.git Convert dnssecsigner to SharedLockGuarded --- diff --git a/pdns/dnssecsigner.cc b/pdns/dnssecsigner.cc index a98acf7295..3536902ca4 100644 --- a/pdns/dnssecsigner.cc +++ b/pdns/dnssecsigner.cc @@ -33,9 +33,8 @@ #include "statbag.hh" extern StatBag S; -static ReadWriteLock g_signatures_lock; typedef map, string> signaturecache_t; -static signaturecache_t g_signatures; +static SharedLockGuarded g_signatures; static int g_cacheweekno; const static std::set g_KSKSignedQTypes {QType::DNSKEY, QType::CDS, QType::CDNSKEY}; @@ -67,9 +66,9 @@ static void fillOutRRSIG(DNSSECPrivateKey& dpk, const DNSName& signQName, RRSIGR bool doCache=true; if(doCache) { - ReadLock l(&g_signatures_lock); - signaturecache_t::const_iterator iter = g_signatures.find(lookup); - if(iter != g_signatures.end()) { + auto signatures = g_signatures.read_lock(); + signaturecache_t::const_iterator iter = signatures->find(lookup); + if (iter != signatures->end()) { rrc.d_signature=iter->second; return; } @@ -83,13 +82,13 @@ static void fillOutRRSIG(DNSSECPrivateKey& dpk, const DNSName& signQName, RRSIGR int weekno = (time(nullptr) - dns_random(3600)) / (86400*7); // we just spent milliseconds doing a signature, microsecond more won't kill us const static int maxcachesize=::arg().asNum("max-signature-cache-entries", INT_MAX); - WriteLock l(&g_signatures_lock); - if(g_cacheweekno < weekno || g_signatures.size() >= (uint) maxcachesize) { // blunt but effective (C) Habbie, mind04 + auto signatures = g_signatures.write_lock(); + if (g_cacheweekno < weekno || signatures->size() >= (uint) maxcachesize) { // blunt but effective (C) Habbie, mind04 g_log<clear(); g_cacheweekno = weekno; } - g_signatures[lookup] = rrc.d_signature; + (*signatures)[lookup] = rrc.d_signature; } } @@ -169,8 +168,7 @@ static void addSignature(DNSSECKeeper& dk, UeberBackend& db, const DNSName& sign uint64_t signatureCacheSize(const std::string& str) { - ReadLock l(&g_signatures_lock); - return g_signatures.size(); + return g_signatures.read_lock()->size(); } static bool rrsigncomp(const DNSZoneRecord& a, const DNSZoneRecord& b)