]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Convert dnssecsigner to SharedLockGuarded
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 4 Jun 2021 15:27:43 +0000 (17:27 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Wed, 18 Aug 2021 09:34:05 +0000 (11:34 +0200)
pdns/dnssecsigner.cc

index a98acf72959fc733a80fc0d9752aaaa9f7892d7b..3536902ca48154043f58828d46181a79d6cdcf2d 100644 (file)
@@ -33,9 +33,8 @@
 #include "statbag.hh"
 extern StatBag S;
 
-static ReadWriteLock g_signatures_lock;
 typedef map<pair<string, string>, string> signaturecache_t;
-static signaturecache_t g_signatures;
+static SharedLockGuarded<signaturecache_t> g_signatures;
 static int g_cacheweekno;
 
 const static std::set<uint16_t> 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<<Logger::Warning<<"Cleared signature cache."<<endl;
-      g_signatures.clear();
+      signatures->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)