{
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;
}
{
- 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;
}
}
}
{
- 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) {
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};