}
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);
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)
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);
rrc.d_signature.assign((char*)signature, sizeof(signature));
+ Lock l(&g_rrsigs_lock);
g_rrsigs[make_pair(hash, rrc.d_tag)] = rrc;
-
}