mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-27 03:33:27 -03:00
wallet: Prevent wallet unload on GetWalletForJSONRPCRequest
Don't extend shared ownership of all wallets to GetWalletForJSONRPCRequest scope.
This commit is contained in:
parent
2f0f056e08
commit
f59959e381
3 changed files with 12 additions and 5 deletions
|
@ -64,12 +64,11 @@ std::shared_ptr<CWallet> GetWalletForJSONRPCRequest(const JSONRPCRequest& reques
|
||||||
return pwallet;
|
return pwallet;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::shared_ptr<CWallet>> wallets = GetWallets(context);
|
size_t count{0};
|
||||||
if (wallets.size() == 1) {
|
auto wallet = GetDefaultWallet(context, count);
|
||||||
return wallets[0];
|
if (wallet) return wallet;
|
||||||
}
|
|
||||||
|
|
||||||
if (wallets.empty()) {
|
if (count == 0) {
|
||||||
throw JSONRPCError(
|
throw JSONRPCError(
|
||||||
RPC_WALLET_NOT_FOUND, "No wallet is loaded. Load a wallet using loadwallet or create a new one with createwallet. (Note: A default wallet is no longer automatically created)");
|
RPC_WALLET_NOT_FOUND, "No wallet is loaded. Load a wallet using loadwallet or create a new one with createwallet. (Note: A default wallet is no longer automatically created)");
|
||||||
}
|
}
|
||||||
|
|
|
@ -151,6 +151,13 @@ std::vector<std::shared_ptr<CWallet>> GetWallets(WalletContext& context)
|
||||||
return context.wallets;
|
return context.wallets;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<CWallet> GetDefaultWallet(WalletContext& context, size_t& count)
|
||||||
|
{
|
||||||
|
LOCK(context.wallets_mutex);
|
||||||
|
count = context.wallets.size();
|
||||||
|
return count == 1 ? context.wallets[0] : nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
std::shared_ptr<CWallet> GetWallet(WalletContext& context, const std::string& name)
|
std::shared_ptr<CWallet> GetWallet(WalletContext& context, const std::string& name)
|
||||||
{
|
{
|
||||||
LOCK(context.wallets_mutex);
|
LOCK(context.wallets_mutex);
|
||||||
|
|
|
@ -62,6 +62,7 @@ bool AddWallet(WalletContext& context, const std::shared_ptr<CWallet>& wallet);
|
||||||
bool RemoveWallet(WalletContext& context, const std::shared_ptr<CWallet>& wallet, std::optional<bool> load_on_start, std::vector<bilingual_str>& warnings);
|
bool RemoveWallet(WalletContext& context, const std::shared_ptr<CWallet>& wallet, std::optional<bool> load_on_start, std::vector<bilingual_str>& warnings);
|
||||||
bool RemoveWallet(WalletContext& context, const std::shared_ptr<CWallet>& wallet, std::optional<bool> load_on_start);
|
bool RemoveWallet(WalletContext& context, const std::shared_ptr<CWallet>& wallet, std::optional<bool> load_on_start);
|
||||||
std::vector<std::shared_ptr<CWallet>> GetWallets(WalletContext& context);
|
std::vector<std::shared_ptr<CWallet>> GetWallets(WalletContext& context);
|
||||||
|
std::shared_ptr<CWallet> GetDefaultWallet(WalletContext& context, size_t& count);
|
||||||
std::shared_ptr<CWallet> GetWallet(WalletContext& context, const std::string& name);
|
std::shared_ptr<CWallet> GetWallet(WalletContext& context, const std::string& name);
|
||||||
std::shared_ptr<CWallet> LoadWallet(WalletContext& context, const std::string& name, std::optional<bool> load_on_start, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings);
|
std::shared_ptr<CWallet> LoadWallet(WalletContext& context, const std::string& name, std::optional<bool> load_on_start, const DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings);
|
||||||
std::shared_ptr<CWallet> CreateWallet(WalletContext& context, const std::string& name, std::optional<bool> load_on_start, DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings);
|
std::shared_ptr<CWallet> CreateWallet(WalletContext& context, const std::string& name, std::optional<bool> load_on_start, DatabaseOptions& options, DatabaseStatus& status, bilingual_str& error, std::vector<bilingual_str>& warnings);
|
||||||
|
|
Loading…
Add table
Reference in a new issue