aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoão Barbosa <joao.paulo.barbosa@gmail.com>2020-06-15 22:57:57 +0100
committerJoão Barbosa <joao.paulo.barbosa@gmail.com>2020-08-17 00:06:02 +0100
commita13cafc6c6998baedf3c5766259c21fcd763b99e (patch)
treea971c5150941f70f02a5517852f0f5b44c3ae6c2
parentffad34816722cdf27a0a7c16539ddd1d655602e0 (diff)
downloadbitcoin-a13cafc6c6998baedf3c5766259c21fcd763b99e.tar.xz
wallet: GetWalletTx requires cs_wallet lock
-rw-r--r--src/wallet/wallet.cpp3
-rw-r--r--src/wallet/wallet.h2
2 files changed, 3 insertions, 2 deletions
diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp
index 9c7b446c23..080010d12f 100644
--- a/src/wallet/wallet.cpp
+++ b/src/wallet/wallet.cpp
@@ -276,7 +276,7 @@ std::string COutput::ToString() const
const CWalletTx* CWallet::GetWalletTx(const uint256& hash) const
{
- LOCK(cs_wallet);
+ AssertLockHeld(cs_wallet);
std::map<uint256, CWalletTx>::const_iterator it = mapWallet.find(hash);
if (it == mapWallet.end())
return nullptr;
@@ -1983,6 +1983,7 @@ bool CWalletTx::IsTrusted(std::set<uint256>& trusted_parents) const
if (!InMempool()) return false;
// Trusted if all inputs are from us and are in the mempool:
+ LOCK(pwallet->cs_wallet);
for (const CTxIn& txin : tx->vin)
{
// Transactions not sent by us: not trusted
diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h
index a761caf38c..558d27fa78 100644
--- a/src/wallet/wallet.h
+++ b/src/wallet/wallet.h
@@ -793,7 +793,7 @@ public:
/** Interface for accessing chain state. */
interfaces::Chain& chain() const { assert(m_chain); return *m_chain; }
- const CWalletTx* GetWalletTx(const uint256& hash) const;
+ const CWalletTx* GetWalletTx(const uint256& hash) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
//! check whether we are allowed to upgrade (or already support) to the named feature
bool CanSupportFeature(enum WalletFeature wf) const override EXCLUSIVE_LOCKS_REQUIRED(cs_wallet) { AssertLockHeld(cs_wallet); return nWalletMaxVersion >= wf; }