]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Convert CDBKVStore to SharedLockGuarded
authorRemi Gacogne <remi.gacogne@powerdns.com>
Fri, 30 Apr 2021 13:52:12 +0000 (15:52 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Tue, 17 Aug 2021 12:04:45 +0000 (14:04 +0200)
pdns/dnsdistdist/dnsdist-kvs.cc
pdns/dnsdistdist/dnsdist-kvs.hh

index 6dd59fb663e26fa50b8c2c48e226669f8f37f48f..bc43e8f26e8fae0949d88ed9d7f05a1ac0538920 100644 (file)
@@ -192,8 +192,7 @@ bool CDBKVStore::reload(const struct stat& st)
 {
   auto newCDB = std::unique_ptr<CDB>(new CDB(d_fname));
   {
-    WriteLock wl(&d_lock);
-    d_cdb = std::move(newCDB);
+    *(d_cdb.lock()) = std::move(newCDB);
   }
   d_mtime = st.st_mtime;
   return true;
@@ -247,8 +246,8 @@ bool CDBKVStore::getValue(const std::string& key, std::string& value)
     }
 
     {
-      ReadLock rl(&d_lock);
-      if (d_cdb && d_cdb->findOne(key, value)) {
+      auto cdb = d_cdb.read_lock();
+      if (*cdb && (*cdb)->findOne(key, value)) {
         return true;
       }
     }
@@ -269,12 +268,12 @@ bool CDBKVStore::keyExists(const std::string& key)
     }
 
     {
-      ReadLock rl(&d_lock);
-      if (!d_cdb) {
+      auto cdb = d_cdb.read_lock();
+      if (!*cdb) {
         return false;
       }
 
-      return d_cdb->keyExists(key);
+      return (*cdb)->keyExists(key);
     }
   }
   catch(const std::exception& e) {
index 85c87c4c90b5b39c15d97ed735ec0cc39e193331..14d0bed079b06c939867c21217c841d99b1d009c 100644 (file)
@@ -210,9 +210,8 @@ private:
   void refreshDBIfNeeded(time_t now);
   bool reload(const struct stat& st);
 
-  std::unique_ptr<CDB> d_cdb{nullptr};
+  SharedLockGuarded<std::unique_ptr<CDB>> d_cdb{nullptr};
   std::string d_fname;
-  ReadWriteLock d_lock;
   time_t d_mtime{0};
   time_t d_nextCheck{0};
   time_t d_refreshDelay{0};