Page MenuHomePhabricator

Merge #12507: Interrupt rescan on shutdown request
ClosedPublic

Authored by nakihito on Thu, Aug 29, 23:04.

Details

Summary

c4fda76 wallet: Interrupt rescan on shutdown request (João Barbosa)

Pull request description:

Fixes #10987.

Here are the steps to test the feature:

1. start bitcoind, generate a couple of transactions and then stop:
```
bitcoind -regtest -printtoconsole
bitcoin-cli -regtest generate 100
```
2. apply the following patch
```diff
diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp
index 2478d67ce..8f8cea40c 100644
--- a/src/wallet/wallet.cpp
+++ b/src/wallet/wallet.cpp
@@ -1671,6 +1671,7 @@ CBlockIndex* CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, CBlock
         }
         while (pindex && !fAbortRescan && !ShutdownRequested())
         {
+            MilliSleep(500);
             if (pindex->nHeight % 100 == 0 && dProgressTip - dProgressStart > 0.0) {
                 double gvp = 0;
                 {
```
3. start bitcoind with rescan flag, interrupt with CTRL+C and the output should look like:
```
bitcoind -regtest -printtoconsole -rescan
...
^C2018-02-22 01:00:55 AddToWallet e8bfb4501b630ad2acb91e88ab0112a779766536d2c564b04faae45ae90e18f7
2018-02-22 01:00:55 Rescan interrupted by shutdown request at block 5. Progress=1.000000
2018-02-22 01:00:55  rescan                 1774ms
2018-02-22 01:00:55 setKeyPool.size() = 1995
2018-02-22 01:00:55 mapWallet.size() = 10145
2018-02-22 01:00:55 mapAddressBook.size() = 3
2018-02-22 01:00:55 Shutdown: In progress...
2018-02-22 01:00:55 scheduler thread interrupt
2018-02-22 01:00:55 Shutdown: done
```

Tree-SHA512: f9bebe2cdacf0359b6cbfcbc48ac2818a3ae7aa7822ff0c2c0de4ca2fff7c88493380b74a1c5ff2ce1de01fe605b0e5ef3576f124ea9cff8ef25a9e762477b92

Backport of Core PR12507
https://github.com/bitcoin/bitcoin/pull/12507/

Test Plan
make check
./bitcoind -printtoconsole -rescan
CTRL+C

Verify console output

Diff Detail

Repository
rABC Bitcoin ABC
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.