diff options
author | João Barbosa <joao.paulo.barbosa@gmail.com> | 2018-05-22 16:18:07 +0100 |
---|---|---|
committer | João Barbosa <joao.paulo.barbosa@gmail.com> | 2018-05-22 16:56:20 +0100 |
commit | 80b4910f7d87983f50047074c3c2397b0a5c4e92 (patch) | |
tree | 0bd471d1bc9b659b52033bd333cfe9b433e9b4e1 /src/interfaces | |
parent | 6916024768ec57a00f54224640ab4e4871d2a30a (diff) |
wallet: Use shared pointer to retain wallet instance
Diffstat (limited to 'src/interfaces')
-rw-r--r-- | src/interfaces/node.cpp | 6 | ||||
-rw-r--r-- | src/interfaces/wallet.cpp | 5 | ||||
-rw-r--r-- | src/interfaces/wallet.h | 2 |
3 files changed, 7 insertions, 6 deletions
diff --git a/src/interfaces/node.cpp b/src/interfaces/node.cpp index 73657d4f5a..9270351176 100644 --- a/src/interfaces/node.cpp +++ b/src/interfaces/node.cpp @@ -222,8 +222,8 @@ class NodeImpl : public Node { #ifdef ENABLE_WALLET std::vector<std::unique_ptr<Wallet>> wallets; - for (CWallet* wallet : GetWallets()) { - wallets.emplace_back(MakeWallet(*wallet)); + for (const std::shared_ptr<CWallet>& wallet : GetWallets()) { + wallets.emplace_back(MakeWallet(wallet)); } return wallets; #else @@ -249,7 +249,7 @@ class NodeImpl : public Node std::unique_ptr<Handler> handleLoadWallet(LoadWalletFn fn) override { CHECK_WALLET( - return MakeHandler(::uiInterface.LoadWallet.connect([fn](CWallet* wallet) { fn(MakeWallet(*wallet)); }))); + return MakeHandler(::uiInterface.LoadWallet.connect([fn](std::shared_ptr<CWallet> wallet) { fn(MakeWallet(wallet)); }))); } std::unique_ptr<Handler> handleNotifyNumConnectionsChanged(NotifyNumConnectionsChangedFn fn) override { diff --git a/src/interfaces/wallet.cpp b/src/interfaces/wallet.cpp index 63b9d80a92..3029dbe8e3 100644 --- a/src/interfaces/wallet.cpp +++ b/src/interfaces/wallet.cpp @@ -118,7 +118,7 @@ WalletTxOut MakeWalletTxOut(CWallet& wallet, const CWalletTx& wtx, int n, int de class WalletImpl : public Wallet { public: - WalletImpl(CWallet& wallet) : m_wallet(wallet) {} + WalletImpl(const std::shared_ptr<CWallet>& wallet) : m_shared_wallet(wallet), m_wallet(*wallet.get()) {} bool encryptWallet(const SecureString& wallet_passphrase) override { @@ -453,11 +453,12 @@ public: return MakeHandler(m_wallet.NotifyWatchonlyChanged.connect(fn)); } + std::shared_ptr<CWallet> m_shared_wallet; CWallet& m_wallet; }; } // namespace -std::unique_ptr<Wallet> MakeWallet(CWallet& wallet) { return MakeUnique<WalletImpl>(wallet); } +std::unique_ptr<Wallet> MakeWallet(const std::shared_ptr<CWallet>& wallet) { return MakeUnique<WalletImpl>(wallet); } } // namespace interfaces diff --git a/src/interfaces/wallet.h b/src/interfaces/wallet.h index ff779cd0ad..82ae0b14b5 100644 --- a/src/interfaces/wallet.h +++ b/src/interfaces/wallet.h @@ -363,7 +363,7 @@ struct WalletTxOut //! Return implementation of Wallet interface. This function will be undefined //! in builds where ENABLE_WALLET is false. -std::unique_ptr<Wallet> MakeWallet(CWallet& wallet); +std::unique_ptr<Wallet> MakeWallet(const std::shared_ptr<CWallet>& wallet); } // namespace interfaces |