If the chain advances during a rescan, ScanForWalletTransactions would previously process the new blocks without adjusting m_last_processed_block
, which would leave the wallet in an inconsistent state temporarily, and could lead to crashes in the GUI reported in #31474.
Fix this by not rescanning blocks beyond m_last_processed_block
- for all blocks beyond that height, there will be pending BlockConnected notifications that will process them after the rescan is finished.
This means that if rescanning was triggered with cs_wallet
permanently held (AttachChain
), additional blocks that were connected during the rescan will only be processed with the pending blockConnected
notifications after the lock is released.
If rescanning without a permanent cs_wallet
lock (RescanFromTime
), additional blocks that were connected during the rescan can be re-processed here because m_last_processed_block
was already updated by blockConnected
.
Fixes #31474