Skip to content
Snippets Groups Projects
Commit efdfbe5e authored by Adrien Béraud's avatar Adrien Béraud
Browse files

namedirectory: lock cache during lookup

Change-Id: If92032d68a6429695cb698ca6fc497b1b095f3a5
parent f0506e16
No related branches found
No related tags found
No related merge requests found
...@@ -105,9 +105,9 @@ size_t getContentLength(restbed::Response& reply) ...@@ -105,9 +105,9 @@ size_t getContentLength(restbed::Response& reply)
void NameDirectory::lookupAddress(const std::string& addr, LookupCallback cb) void NameDirectory::lookupAddress(const std::string& addr, LookupCallback cb)
{ {
try { try {
auto cacheRes = nameCache_.find(addr); std::string cacheResult = nameCache(addr);
if (cacheRes != nameCache_.end()) { if (not cacheResult.empty()) {
cb(cacheRes->second, Response::found); cb(cacheResult, Response::found);
return; return;
} }
...@@ -179,9 +179,9 @@ void NameDirectory::lookupName(const std::string& n, LookupCallback cb) ...@@ -179,9 +179,9 @@ void NameDirectory::lookupName(const std::string& n, LookupCallback cb)
} }
toLower(name); toLower(name);
auto cacheRes = addrCache_.find(name); std::string cacheResult = addrCache(name);
if (cacheRes != addrCache_.end()) { if (not cacheResult.empty()) {
cb(cacheRes->second, Response::found); cb(cacheResult, Response::found);
return; return;
} }
...@@ -260,9 +260,9 @@ void NameDirectory::registerName(const std::string& addr, const std::string& n, ...@@ -260,9 +260,9 @@ void NameDirectory::registerName(const std::string& addr, const std::string& n,
} }
toLower(name); toLower(name);
auto cacheRes = addrCache_.find(name); auto cacheResult = addrCache(name);
if (cacheRes != addrCache_.end()) { if (not cacheResult.empty()) {
if (cacheRes->second == addr) if (cacheResult == addr)
cb(RegistrationResponse::success); cb(RegistrationResponse::success);
else else
cb(RegistrationResponse::alreadyTaken); cb(RegistrationResponse::alreadyTaken);
......
...@@ -58,12 +58,24 @@ private: ...@@ -58,12 +58,24 @@ private:
NameDirectory(NameDirectory&&) = delete; NameDirectory(NameDirectory&&) = delete;
constexpr static const char* const DEFAULT_SERVER_HOST = "ns.jami.net"; constexpr static const char* const DEFAULT_SERVER_HOST = "ns.jami.net";
std::mutex lock_ {};
const std::string serverHost_ {DEFAULT_SERVER_HOST}; const std::string serverHost_ {DEFAULT_SERVER_HOST};
const std::string cachePath_; const std::string cachePath_;
std::map<std::string, std::string> nameCache_ {}; std::map<std::string, std::string> nameCache_ {};
std::map<std::string, std::string> addrCache_ {}; 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; bool validateName(const std::string& name) const;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment