]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
rec: Don't wait on the aggressive cache's locks
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 8 Jan 2021 16:08:14 +0000 (17:08 +0100)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Mon, 22 Feb 2021 17:44:07 +0000 (18:44 +0100)
pdns/recursordist/aggressive_nsec.cc

index b35038cd479f7e06a6df0b046a2e390d07ef7cf6..0b0b74d4dc5f76c8f907bfdee50d90f3b0a472ed 100644 (file)
@@ -36,8 +36,11 @@ std::shared_ptr<AggressiveNSECCache::ZoneEntry> AggressiveNSECCache::getBestZone
 {
   std::shared_ptr<AggressiveNSECCache::ZoneEntry> entry{nullptr};
   {
-    #warning tryreadlock?
-    ReadLock rl(d_lock);
+    TryReadLock rl(d_lock);
+    if (!rl.gotIt()) {
+      return entry;
+    }
+
     auto got = d_zones.lookup(zone);
     if (got) {
       return *got;
@@ -291,9 +294,8 @@ void AggressiveNSECCache::insertNSEC(const DNSName& zone, const DNSName& owner,
 
 bool AggressiveNSECCache::getNSECBefore(time_t now, std::shared_ptr<AggressiveNSECCache::ZoneEntry>& zoneEntry, const DNSName& name, ZoneEntry::CacheEntry& entry)
 {
-  #warning try?
-  std::lock_guard<std::mutex> lock(zoneEntry->d_lock);
-  if (zoneEntry->d_entries.empty()) {
+  std::unique_lock<std::mutex> lock(zoneEntry->d_lock, std::try_to_lock);
+  if (!lock.owns_lock() || zoneEntry->d_entries.empty()) {
     return false;
   }
 
@@ -347,9 +349,8 @@ bool AggressiveNSECCache::getNSECBefore(time_t now, std::shared_ptr<AggressiveNS
 
 bool AggressiveNSECCache::getNSEC3(time_t now, std::shared_ptr<AggressiveNSECCache::ZoneEntry>& zoneEntry, const DNSName& name, ZoneEntry::CacheEntry& entry)
 {
-  #warning try?
-  std::lock_guard<std::mutex> lock(zoneEntry->d_lock);
-  if (zoneEntry->d_entries.empty()) {
+  std::unique_lock<std::mutex> lock(zoneEntry->d_lock, std::try_to_lock);
+  if (!lock.owns_lock() || zoneEntry->d_entries.empty()) {
     return false;
   }