From 3b9bf0eb0e0d69f112ce905078018d8351c73e26 Mon Sep 17 00:00:00 2001 From: Patrick Strateman Date: Fri, 21 Jun 2019 13:27:00 -0400 Subject: [PATCH] rpc: Allow shutdown while in generateblocks By checking the shutdown flag every loop we can use the entire nonce space instead of breaking every 16 bits to check the shutdown flag. This has been possible since the shutdown flag was switched to an atomic, before that change it was controlled by a condition variable and lock. --- src/rpc/mining.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp index 477f05f46..1dfaecc95 100644 --- a/src/rpc/mining.cpp +++ b/src/rpc/mining.cpp @@ -103,7 +103,6 @@ static UniValue getnetworkhashps(const JSONRPCRequest& request) static UniValue generateBlocks(const CScript& coinbase_script, int nGenerate, uint64_t nMaxTries) { - static const int nInnerLoopCount = 0x10000; int nHeightEnd = 0; int nHeight = 0; @@ -124,14 +123,14 @@ static UniValue generateBlocks(const CScript& coinbase_script, int nGenerate, ui LOCK(cs_main); IncrementExtraNonce(pblock, ::ChainActive().Tip(), nExtraNonce); } - while (nMaxTries > 0 && pblock->nNonce < nInnerLoopCount && !CheckProofOfWork(pblock->GetHash(), pblock->nBits, Params().GetConsensus())) { + while (nMaxTries > 0 && pblock->nNonce < std::numeric_limits::max() && !CheckProofOfWork(pblock->GetHash(), pblock->nBits, Params().GetConsensus()) && !ShutdownRequested()) { ++pblock->nNonce; --nMaxTries; } - if (nMaxTries == 0) { + if (nMaxTries == 0 || ShutdownRequested()) { break; } - if (pblock->nNonce == nInnerLoopCount) { + if (pblock->nNonce == std::numeric_limits::max()) { continue; } std::shared_ptr shared_pblock = std::make_shared(*pblock);