]> granicus.if.org Git - pdns/commitdiff
add some primitive locking to the rrsig cache, plus clarify some logging in the gener...
authorBert Hubert <bert.hubert@netherlabs.nl>
Sun, 2 Jan 2011 21:50:21 +0000 (21:50 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Sun, 2 Jan 2011 21:50:21 +0000 (21:50 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1795 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/backends/gsql/gsqlbackend.cc
pdns/dbdnsseckeeper.cc

index 443525bab4a75e5d5765e3190195826ab705e5a8..5e5a7ef55bd8e30eb1ae3f87008b63b96988827b 100644 (file)
@@ -275,7 +275,7 @@ bool GSQLBackend::updateDNSSECOrderAndAuthAbsolute(uint32_t domain_id, const std
 }
 bool GSQLBackend::getBeforeAndAfterNamesAbsolute(uint32_t id, const std::string& qname, std::string& unhashed, std::string& before, std::string& after)
 {
-  cerr<<"gsql before/after called for id="<<id<<", qname="<<qname<<endl;
+  cerr<<"gsql before/after called for id="<<id<<", qname='"<<qname<<"'"<<endl;
   unhashed.clear(); before.clear(); after.clear();
   string lcqname=toLower(qname);
   
index f09d8ffd6e23325680306feed4234d98e0121556..d952b6441124204fbbe309dac5cdc12e4db5f976 100644 (file)
@@ -271,7 +271,8 @@ void addSignature(const std::string signQName, const std::string& wildcardname,
   toSign.clear();
 }
 
-// XXXX FIXME THINK ABOUT LOCKING HERE
+pthread_mutex_t g_rrsigs_lock = PTHREAD_MUTEX_INITIALIZER;
+
 map<pair<string, uint16_t>, RRSIGRecordContent> g_rrsigs;
 
 void fillOutRRSIG(const std::string& signQName, RRSIGRecordContent& rrc, const std::string& hash, vector<shared_ptr<DNSRecordContent> >& toSign, bool withKSK) 
@@ -281,11 +282,14 @@ void fillOutRRSIG(const std::string& signQName, RRSIGRecordContent& rrc, const s
   DNSKEYRecordContent drc=getDNSKEYFor(rrc.d_signer, withKSK, &rc);
   rrc.d_tag = drc.getTag();
   rrc.d_algorithm = drc.d_algorithm;
-  
-  if(g_rrsigs.count(make_pair(hash, rrc.d_tag))) {
-    // cerr<<"RRSIG cache hit !"<<endl;
-    rrc = g_rrsigs[make_pair(hash, rrc.d_tag)];
-    return;
+
+  {  
+    Lock l(&g_rrsigs_lock);
+    if(g_rrsigs.count(make_pair(hash, rrc.d_tag))) {
+      // cerr<<"RRSIG cache hit !"<<endl;
+      rrc = g_rrsigs[make_pair(hash, rrc.d_tag)];
+      return;
+    }
   }
     
   string realhash=getSHA1HashForRRSET(signQName, rrc, toSign);
@@ -301,6 +305,6 @@ void fillOutRRSIG(const std::string& signQName, RRSIGRecordContent& rrc, const s
   
   rrc.d_signature.assign((char*)signature, sizeof(signature));
   
+  Lock l(&g_rrsigs_lock);
   g_rrsigs[make_pair(hash, rrc.d_tag)] = rrc;
-
 }