From c0d07dc4cba7634cde4e8bf586557772f3248a42 Mon Sep 17 00:00:00 2001 From: Russell Yanofsky Date: Wed, 22 Jan 2020 16:53:42 -0500 Subject: wallet: Avoid use of Chain::Lock in CWallet::ScanForWalletTransactions This is a step toward removing the Chain::Lock class and reducing cs_main locking. This change affects behavior in a few small ways. - If there's no max_height specified, percentage progress is measured ending at wallet last processed block instead of node tip - More consistent error reporting: Early check to see if start_block is on the active chain is removed, so start_block is always read and the triggers an error if it's unavailable --- src/interfaces/chain.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/interfaces/chain.cpp') diff --git a/src/interfaces/chain.cpp b/src/interfaces/chain.cpp index 1c578b56c..2b2d3a4b8 100644 --- a/src/interfaces/chain.cpp +++ b/src/interfaces/chain.cpp @@ -251,6 +251,13 @@ public: WAIT_LOCK(cs_main, lock); return FillBlock(ChainActive().FindEarliestAtLeast(min_time, min_height), block, lock); } + bool findNextBlock(const uint256& block_hash, int block_height, const FoundBlock& next, bool* reorg) override { + WAIT_LOCK(cs_main, lock); + CBlockIndex* block = ChainActive()[block_height]; + if (block && block->GetBlockHash() != block_hash) block = nullptr; + if (reorg) *reorg = !block; + return FillBlock(block ? ChainActive()[block_height + 1] : nullptr, next, lock); + } bool findAncestorByHeight(const uint256& block_hash, int ancestor_height, const FoundBlock& ancestor_out) override { WAIT_LOCK(cs_main, lock); -- cgit v1.2.3