diff --git a/src/ringdht/namedirectory.cpp b/src/ringdht/namedirectory.cpp index 2c4d5a777656be84c0ae24550ab74a5214fdb65d..d093c2dbac1c6ed70647e8ca784429f0f989846e 100644 --- a/src/ringdht/namedirectory.cpp +++ b/src/ringdht/namedirectory.cpp @@ -105,9 +105,9 @@ size_t getContentLength(restbed::Response& reply) void NameDirectory::lookupAddress(const std::string& addr, LookupCallback cb) { try { - auto cacheRes = nameCache_.find(addr); - if (cacheRes != nameCache_.end()) { - cb(cacheRes->second, Response::found); + std::string cacheResult = nameCache(addr); + if (not cacheResult.empty()) { + cb(cacheResult, Response::found); return; } @@ -179,9 +179,9 @@ void NameDirectory::lookupName(const std::string& n, LookupCallback cb) } toLower(name); - auto cacheRes = addrCache_.find(name); - if (cacheRes != addrCache_.end()) { - cb(cacheRes->second, Response::found); + std::string cacheResult = addrCache(name); + if (not cacheResult.empty()) { + cb(cacheResult, Response::found); return; } @@ -260,9 +260,9 @@ void NameDirectory::registerName(const std::string& addr, const std::string& n, } toLower(name); - auto cacheRes = addrCache_.find(name); - if (cacheRes != addrCache_.end()) { - if (cacheRes->second == addr) + auto cacheResult = addrCache(name); + if (not cacheResult.empty()) { + if (cacheResult == addr) cb(RegistrationResponse::success); else cb(RegistrationResponse::alreadyTaken); diff --git a/src/ringdht/namedirectory.h b/src/ringdht/namedirectory.h index 1590c4736119b97e16d8745864d79834dac0c9b0..62049ef4fbe46803bb778f6e93701c3a69e9e14d 100644 --- a/src/ringdht/namedirectory.h +++ b/src/ringdht/namedirectory.h @@ -58,12 +58,24 @@ private: NameDirectory(NameDirectory&&) = delete; constexpr static const char* const DEFAULT_SERVER_HOST = "ns.jami.net"; + std::mutex lock_ {}; + const std::string serverHost_ {DEFAULT_SERVER_HOST}; const std::string cachePath_; std::map<std::string, std::string> nameCache_ {}; std::map<std::string, std::string> addrCache_ {}; - std::mutex lock_ {}; + + std::string nameCache(const std::string& addr) { + std::lock_guard<std::mutex> l(lock_); + auto cacheRes = nameCache_.find(addr); + return cacheRes != nameCache_.end() ? cacheRes->second : std::string{}; + } + std::string addrCache(const std::string& name) { + std::lock_guard<std::mutex> l(lock_); + auto cacheRes = addrCache_.find(name); + return cacheRes != addrCache_.end() ? cacheRes->second : std::string{}; + } bool validateName(const std::string& name) const;