Go back to taking both main+wallet lock in DecrementWitnesses

By taking a wallet lock first and then main later we run into
a potential deadlock :

2024-09-13 11:14:37 POTENTIAL DEADLOCK DETECTED
2024-09-13 11:14:37 Previous lock order was:
2024-09-13 11:14:37  (1) cs_wallet  wallet/wallet.cpp:985
2024-09-13 11:14:37  (2) cs_main  wallet/wallet.cpp:890
2024-09-13 11:14:37 Current lock order is:
2024-09-13 11:14:37  (2) cs_main  wallet/wallet.cpp:2845
2024-09-13 11:14:37  (1) cs_wallet  wallet/wallet.cpp:2845
This commit is contained in:
Duke
2024-09-13 09:28:59 -04:00
parent f5cae3b403
commit 4f4a72da8e

View File

@@ -887,7 +887,6 @@ bool CWallet::IsSaplingSpent(const uint256& nullifier) const {
} }
unsigned int CWallet::GetSaplingSpendDepth(const uint256& nullifier) const { unsigned int CWallet::GetSaplingSpendDepth(const uint256& nullifier) const {
LOCK(cs_main);
pair<TxNullifiers::const_iterator, TxNullifiers::const_iterator> range; pair<TxNullifiers::const_iterator, TxNullifiers::const_iterator> range;
range = mapTxSaplingNullifiers.equal_range(nullifier); range = mapTxSaplingNullifiers.equal_range(nullifier);
@@ -979,10 +978,9 @@ void CWallet::ClearNoteWitnessCache()
void CWallet::DecrementNoteWitnesses(const CBlockIndex* pindex) void CWallet::DecrementNoteWitnesses(const CBlockIndex* pindex)
{ {
extern int32_t HUSH_REWIND; extern int32_t HUSH_REWIND;
LOCK(cs_wallet); LOCK2(cs_main, cs_wallet);
for (std::pair<const uint256, CWalletTx>& wtxItem : mapWallet) { for (std::pair<const uint256, CWalletTx>& wtxItem : mapWallet) {
//Sapling //Sapling