Hold cs_wallet for whole block [dis]connection processing
This simplifies fixing the wallet-returns-stale-info issue as we now hold cs_wallet across an entire block instead of only per-tx.
This commit is contained in:
parent
461e49fee2
commit
e6d5e6cbbe
1 changed files with 3 additions and 3 deletions
|
@ -1138,6 +1138,7 @@ void CWallet::TransactionAddedToMempool(const CTransactionRef& ptx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void CWallet::BlockConnected(const std::shared_ptr<const CBlock>& pblock, const CBlockIndex *pindex, const std::vector<CTransactionRef>& vtxConflicted) {
|
void CWallet::BlockConnected(const std::shared_ptr<const CBlock>& pblock, const CBlockIndex *pindex, const std::vector<CTransactionRef>& vtxConflicted) {
|
||||||
|
LOCK2(cs_main, cs_wallet);
|
||||||
// TODO: Tempoarily ensure that mempool removals are notified before
|
// TODO: Tempoarily ensure that mempool removals are notified before
|
||||||
// connected transactions. This shouldn't matter, but the abandoned
|
// connected transactions. This shouldn't matter, but the abandoned
|
||||||
// state of transactions in our wallet is currently cleared when we
|
// state of transactions in our wallet is currently cleared when we
|
||||||
|
@ -1147,18 +1148,17 @@ void CWallet::BlockConnected(const std::shared_ptr<const CBlock>& pblock, const
|
||||||
// the notification that the conflicted transaction was evicted.
|
// the notification that the conflicted transaction was evicted.
|
||||||
|
|
||||||
for (const CTransactionRef& ptx : vtxConflicted) {
|
for (const CTransactionRef& ptx : vtxConflicted) {
|
||||||
LOCK2(cs_main, cs_wallet);
|
|
||||||
SyncTransaction(ptx, NULL, -1);
|
SyncTransaction(ptx, NULL, -1);
|
||||||
}
|
}
|
||||||
for (size_t i = 0; i < pblock->vtx.size(); i++) {
|
for (size_t i = 0; i < pblock->vtx.size(); i++) {
|
||||||
LOCK2(cs_main, cs_wallet);
|
|
||||||
SyncTransaction(pblock->vtx[i], pindex, i);
|
SyncTransaction(pblock->vtx[i], pindex, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CWallet::BlockDisconnected(const std::shared_ptr<const CBlock>& pblock) {
|
void CWallet::BlockDisconnected(const std::shared_ptr<const CBlock>& pblock) {
|
||||||
for (const CTransactionRef& ptx : pblock->vtx) {
|
|
||||||
LOCK2(cs_main, cs_wallet);
|
LOCK2(cs_main, cs_wallet);
|
||||||
|
|
||||||
|
for (const CTransactionRef& ptx : pblock->vtx) {
|
||||||
SyncTransaction(ptx, NULL, -1);
|
SyncTransaction(ptx, NULL, -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue