From: Remi Gacogne Date: Fri, 30 Apr 2021 13:52:12 +0000 (+0200) Subject: dnsdist: Convert CDBKVStore to SharedLockGuarded X-Git-Tag: dnsdist-1.7.0-alpha1~62^2~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=de986184da0ca674babf0d45742d93d1b447b793;p=thirdparty%2Fpdns.git dnsdist: Convert CDBKVStore to SharedLockGuarded --- diff --git a/pdns/dnsdistdist/dnsdist-kvs.cc b/pdns/dnsdistdist/dnsdist-kvs.cc index 6dd59fb663..bc43e8f26e 100644 --- a/pdns/dnsdistdist/dnsdist-kvs.cc +++ b/pdns/dnsdistdist/dnsdist-kvs.cc @@ -192,8 +192,7 @@ bool CDBKVStore::reload(const struct stat& st) { auto newCDB = std::unique_ptr(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) { diff --git a/pdns/dnsdistdist/dnsdist-kvs.hh b/pdns/dnsdistdist/dnsdist-kvs.hh index 85c87c4c90..14d0bed079 100644 --- a/pdns/dnsdistdist/dnsdist-kvs.hh +++ b/pdns/dnsdistdist/dnsdist-kvs.hh @@ -210,9 +210,8 @@ private: void refreshDBIfNeeded(time_t now); bool reload(const struct stat& st); - std::unique_ptr d_cdb{nullptr}; + SharedLockGuarded> 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};