mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-10 10:52:31 -05:00
Merge #13028: Make vpwallets usage thread safe
e2f58f4
wallet: Make vpwallets usage thread safe (João Barbosa)
Pull request description:
This PR turns the functions introduced in #13017 thread safe. This is required to correctly support dynamically loading wallets, which is implemented in #10740.
Tree-SHA512: efaa09e501636cf957aa33de83719ce09dc0c2a19daff741a94ef10d6b7ba5dee538355b80c96ead995140f99f5df0c92fb0e22ae1adb8f397eb478280c8d8c7
This commit is contained in:
commit
783bb6455e
1 changed files with 7 additions and 1 deletions
|
@ -34,10 +34,12 @@
|
||||||
|
|
||||||
#include <boost/algorithm/string/replace.hpp>
|
#include <boost/algorithm/string/replace.hpp>
|
||||||
|
|
||||||
static std::vector<CWallet*> vpwallets;
|
static CCriticalSection cs_wallets;
|
||||||
|
static std::vector<CWallet*> vpwallets GUARDED_BY(cs_wallets);
|
||||||
|
|
||||||
bool AddWallet(CWallet* wallet)
|
bool AddWallet(CWallet* wallet)
|
||||||
{
|
{
|
||||||
|
LOCK(cs_wallets);
|
||||||
assert(wallet);
|
assert(wallet);
|
||||||
std::vector<CWallet*>::const_iterator i = std::find(vpwallets.begin(), vpwallets.end(), wallet);
|
std::vector<CWallet*>::const_iterator i = std::find(vpwallets.begin(), vpwallets.end(), wallet);
|
||||||
if (i != vpwallets.end()) return false;
|
if (i != vpwallets.end()) return false;
|
||||||
|
@ -47,6 +49,7 @@ bool AddWallet(CWallet* wallet)
|
||||||
|
|
||||||
bool RemoveWallet(CWallet* wallet)
|
bool RemoveWallet(CWallet* wallet)
|
||||||
{
|
{
|
||||||
|
LOCK(cs_wallets);
|
||||||
assert(wallet);
|
assert(wallet);
|
||||||
std::vector<CWallet*>::iterator i = std::find(vpwallets.begin(), vpwallets.end(), wallet);
|
std::vector<CWallet*>::iterator i = std::find(vpwallets.begin(), vpwallets.end(), wallet);
|
||||||
if (i == vpwallets.end()) return false;
|
if (i == vpwallets.end()) return false;
|
||||||
|
@ -56,16 +59,19 @@ bool RemoveWallet(CWallet* wallet)
|
||||||
|
|
||||||
bool HasWallets()
|
bool HasWallets()
|
||||||
{
|
{
|
||||||
|
LOCK(cs_wallets);
|
||||||
return !vpwallets.empty();
|
return !vpwallets.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<CWallet*> GetWallets()
|
std::vector<CWallet*> GetWallets()
|
||||||
{
|
{
|
||||||
|
LOCK(cs_wallets);
|
||||||
return vpwallets;
|
return vpwallets;
|
||||||
}
|
}
|
||||||
|
|
||||||
CWallet* GetWallet(const std::string& name)
|
CWallet* GetWallet(const std::string& name)
|
||||||
{
|
{
|
||||||
|
LOCK(cs_wallets);
|
||||||
for (CWallet* wallet : vpwallets) {
|
for (CWallet* wallet : vpwallets) {
|
||||||
if (wallet->GetName() == name) return wallet;
|
if (wallet->GetName() == name) return wallet;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue