diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2019-08-06 13:20:37 -0500 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2019-08-06 13:20:37 -0500 |
commit | 6174c0c103ee2339912589ba4cb8549d19b0d900 (patch) | |
tree | 7d8217815adb42ce4695ddafc19561f5c7b947ac /controller/DBMirrorSet.cpp | |
parent | 8898cb342b476bbfc4e09ea07d27309cf9265ab0 (diff) | |
download | infinitytier-6174c0c103ee2339912589ba4cb8549d19b0d900.tar.gz infinitytier-6174c0c103ee2339912589ba4cb8549d19b0d900.zip |
Fix deadlock bug.
Diffstat (limited to 'controller/DBMirrorSet.cpp')
-rw-r--r-- | controller/DBMirrorSet.cpp | 18 |
1 files changed, 11 insertions, 7 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; |