DNSSECKeeper::keycache_t DNSSECKeeper::s_keycache;
DNSSECKeeper::metacache_t DNSSECKeeper::s_metacache;
-pthread_mutex_t DNSSECKeeper::s_metacachelock = PTHREAD_MUTEX_INITIALIZER;
-pthread_mutex_t DNSSECKeeper::s_keycachelock = PTHREAD_MUTEX_INITIALIZER;
+pthread_rwlock_t DNSSECKeeper::s_metacachelock = PTHREAD_RWLOCK_INITIALIZER;
+pthread_rwlock_t DNSSECKeeper::s_keycachelock = PTHREAD_RWLOCK_INITIALIZER;
AtomicCounter DNSSECKeeper::s_ops;
time_t DNSSECKeeper::s_last_prune;
}
{
- Lock l(&s_keycachelock);
+ ReadLock l(&s_keycachelock);
keycache_t::const_iterator iter = s_keycache.find(zone);
if(iter != s_keycache.end() && iter->d_ttd > (unsigned int)time(0)) {
if(iter->d_keys.empty())
void DNSSECKeeper::clearAllCaches() {
{
- Lock l(&s_keycachelock);
+ WriteLock l(&s_keycachelock);
s_keycache.clear();
}
- Lock l(&s_metacachelock);
+ WriteLock l(&s_metacachelock);
s_metacache.clear();
}
void DNSSECKeeper::clearCaches(const std::string& name)
{
{
- Lock l(&s_keycachelock);
+ WriteLock l(&s_keycachelock);
s_keycache.erase(name);
}
- Lock l(&s_metacachelock);
+ WriteLock l(&s_metacachelock);
pair<metacache_t::iterator, metacache_t::iterator> range = s_metacache.equal_range(name);
while(range.first != range.second)
s_metacache.erase(range.first++);
}
{
- Lock l(&s_metacachelock);
+ ReadLock l(&s_metacachelock);
metacache_t::const_iterator iter = s_metacache.find(tie(zname, key));
if(iter != s_metacache.end() && iter->d_ttd > now) {
nce.d_key= key;
nce.d_value = value;
{
- Lock l(&s_metacachelock);
+ WriteLock l(&s_metacachelock);
replacing_insert(s_metacache, nce);
}
}
}
{
- Lock l(&s_keycachelock);
+ ReadLock l(&s_keycachelock);
keycache_t::const_iterator iter = s_keycache.find(zone);
if(iter != s_keycache.end() && iter->d_ttd > now) {
kce.d_keys = allkeyset;
kce.d_ttd = now + 30;
{
- Lock l(&s_keycachelock);
+ WriteLock l(&s_keycachelock);
replacing_insert(s_keycache, kce);
}
if(now.tv_sec - s_last_prune > (time_t)(30)) {
{
- Lock l(&s_metacachelock);
+ WriteLock l(&s_metacachelock);
pruneCollection(s_metacache, ::arg().asNum("max-cache-entries"));
}
{
- Lock l(&s_keycachelock);
+ WriteLock l(&s_keycachelock);
pruneCollection(s_keycache, ::arg().asNum("max-cache-entries"));
}
s_last_prune=time(0);