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.
This commit is contained in:
parent
32e9453818
commit
3b9bf0eb0e
1 changed files with 3 additions and 4 deletions
|
@ -103,7 +103,6 @@ static UniValue getnetworkhashps(const JSONRPCRequest& request)
|
||||||
|
|
||||||
static UniValue generateBlocks(const CScript& coinbase_script, int nGenerate, uint64_t nMaxTries)
|
static UniValue generateBlocks(const CScript& coinbase_script, int nGenerate, uint64_t nMaxTries)
|
||||||
{
|
{
|
||||||
static const int nInnerLoopCount = 0x10000;
|
|
||||||
int nHeightEnd = 0;
|
int nHeightEnd = 0;
|
||||||
int nHeight = 0;
|
int nHeight = 0;
|
||||||
|
|
||||||
|
@ -124,14 +123,14 @@ static UniValue generateBlocks(const CScript& coinbase_script, int nGenerate, ui
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
IncrementExtraNonce(pblock, ::ChainActive().Tip(), nExtraNonce);
|
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<uint32_t>::max() && !CheckProofOfWork(pblock->GetHash(), pblock->nBits, Params().GetConsensus()) && !ShutdownRequested()) {
|
||||||
++pblock->nNonce;
|
++pblock->nNonce;
|
||||||
--nMaxTries;
|
--nMaxTries;
|
||||||
}
|
}
|
||||||
if (nMaxTries == 0) {
|
if (nMaxTries == 0 || ShutdownRequested()) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (pblock->nNonce == nInnerLoopCount) {
|
if (pblock->nNonce == std::numeric_limits<uint32_t>::max()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
std::shared_ptr<const CBlock> shared_pblock = std::make_shared<const CBlock>(*pblock);
|
std::shared_ptr<const CBlock> shared_pblock = std::make_shared<const CBlock>(*pblock);
|
||||||
|
|
Loading…
Reference in a new issue