summaryrefslogtreecommitdiff
path: root/controller
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2019-08-06 13:20:37 -0500
committerAdam Ierymenko <adam.ierymenko@gmail.com>2019-08-06 13:20:37 -0500
commit6174c0c103ee2339912589ba4cb8549d19b0d900 (patch)
tree7d8217815adb42ce4695ddafc19561f5c7b947ac /controller
parent8898cb342b476bbfc4e09ea07d27309cf9265ab0 (diff)
downloadinfinitytier-6174c0c103ee2339912589ba4cb8549d19b0d900.tar.gz
infinitytier-6174c0c103ee2339912589ba4cb8549d19b0d900.zip
Fix deadlock bug.
Diffstat (limited to 'controller')
-rw-r--r--controller/DBMirrorSet.cpp18
-rw-r--r--controller/LFDB.cpp10
2 files changed, 16 insertions, 12 deletions
diff --git a/controller/DBMirrorSet.cpp b/controller/DBMirrorSet.cpp
index f435698e..5d9ea050 100644
--- a/controller/DBMirrorSet.cpp
+++ b/controller/DBMirrorSet.cpp
@@ -51,7 +51,7 @@ bool DBMirrorSet::get(const uint64_t networkId,nlohmann::json &network)
{
std::lock_guard<std::mutex> l(_dbs_l);
for(auto d=_dbs.begin();d!=_dbs.end();++d) {
- if (get(networkId,network)) {
+ if ((*d)->get(networkId,network)) {
return true;
}
}
@@ -62,7 +62,7 @@ bool DBMirrorSet::get(const uint64_t networkId,nlohmann::json &network,const uin
{
std::lock_guard<std::mutex> l(_dbs_l);
for(auto d=_dbs.begin();d!=_dbs.end();++d) {
- if (get(networkId,network,memberId,member))
+ if ((*d)->get(networkId,network,memberId,member))
return true;
}
return false;
@@ -72,7 +72,7 @@ bool DBMirrorSet::get(const uint64_t networkId,nlohmann::json &network,const uin
{
std::lock_guard<std::mutex> l(_dbs_l);
for(auto d=_dbs.begin();d!=_dbs.end();++d) {
- if (get(networkId,network,memberId,member,info))
+ if ((*d)->get(networkId,network,memberId,member,info))
return true;
}
return false;
@@ -82,7 +82,7 @@ bool DBMirrorSet::get(const uint64_t networkId,nlohmann::json &network,std::vect
{
std::lock_guard<std::mutex> l(_dbs_l);
for(auto d=_dbs.begin();d!=_dbs.end();++d) {
- if (get(networkId,network,members))
+ if ((*d)->get(networkId,network,members))
return true;
}
return false;
@@ -118,16 +118,20 @@ bool DBMirrorSet::isReady()
bool DBMirrorSet::save(nlohmann::json &record,bool notifyListeners)
{
- std::lock_guard<std::mutex> l(_dbs_l);
+ std::vector< std::shared_ptr<DB> > dbs;
+ {
+ std::lock_guard<std::mutex> l(_dbs_l);
+ dbs = _dbs;
+ }
if (notifyListeners) {
- for(auto d=_dbs.begin();d!=_dbs.end();++d) {
+ for(auto d=dbs.begin();d!=dbs.end();++d) {
if ((*d)->save(record,notifyListeners))
return true;
}
return false;
} else {
bool modified = false;
- for(auto d=_dbs.begin();d!=_dbs.end();++d) {
+ for(auto d=dbs.begin();d!=dbs.end();++d) {
modified |= (*d)->save(record,notifyListeners);
}
return modified;
diff --git a/controller/LFDB.cpp b/controller/LFDB.cpp
index 5dd6d082..812b2f38 100644
--- a/controller/LFDB.cpp
+++ b/controller/LFDB.cpp
@@ -83,7 +83,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
if (resp) {
if (resp->status == 200) {
ns->second.dirty = false;
- printf("SET network %.16llx %s\n",ns->first,resp->body.c_str());
+ //printf("SET network %.16llx %s\n",ns->first,resp->body.c_str());
} else {
fprintf(stderr,"ERROR: LFDB: %d from node (create/update network): %s" ZT_EOL_S,resp->status,resp->body.c_str());
}
@@ -129,7 +129,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
if (resp) {
if (resp->status == 200) {
ms->second.lastOnlineDirty = false;
- printf("SET member online %.16llx %.10llx %s\n",ns->first,ms->first,resp->body.c_str());
+ //printf("SET member online %.16llx %.10llx %s\n",ns->first,ms->first,resp->body.c_str());
} else {
fprintf(stderr,"ERROR: LFDB: %d from node (create/update member online status): %s" ZT_EOL_S,resp->status,resp->body.c_str());
}
@@ -157,7 +157,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
if (resp) {
if (resp->status == 200) {
ms->second.dirty = false;
- printf("SET member %.16llx %.10llx %s\n",ns->first,ms->first,resp->body.c_str());
+ //printf("SET member %.16llx %.10llx %s\n",ns->first,ms->first,resp->body.c_str());
} else {
fprintf(stderr,"ERROR: LFDB: %d from node (create/update member): %s" ZT_EOL_S,resp->status,resp->body.c_str());
}
@@ -196,7 +196,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
nlohmann::json &record = result["Record"];
if (record.is_object()) {
const std::string recordValue = result["Value"];
- printf("GET network %s\n",recordValue.c_str());
+ //printf("GET network %s\n",recordValue.c_str());
nlohmann::json network(OSUtils::jsonParse(recordValue));
if (network.is_object()) {
const std::string idstr = network["id"];
@@ -264,7 +264,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
nlohmann::json &record = result["Record"];
if (record.is_object()) {
const std::string recordValue = result["Value"];
- printf("GET member %s\n",recordValue.c_str());
+ //printf("GET member %s\n",recordValue.c_str());
nlohmann::json member(OSUtils::jsonParse(recordValue));
if (member.is_object()) {
const std::string nwidstr = member["nwid"];