diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -1638,15 +1638,15 @@ const BlockHash hash(uint256S(strHash)); CValidationState state; + CBlockIndex *pblockindex; { LOCK(cs_main); - CBlockIndex *pblockindex = LookupBlockIndex(hash); + pblockindex = LookupBlockIndex(hash); if (!pblockindex) { throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Block not found"); } - - InvalidateBlock(config, state, pblockindex); } + InvalidateBlock(config, state, pblockindex); if (state.IsValid()) { ActivateBestChain(config, state); diff --git a/src/validation.h b/src/validation.h --- a/src/validation.h +++ b/src/validation.h @@ -642,7 +642,7 @@ /** Mark a block as invalid. */ bool InvalidateBlock(const Config &config, CValidationState &state, - CBlockIndex *pindex) EXCLUSIVE_LOCKS_REQUIRED(cs_main); + CBlockIndex *pindex); /** Park a block. */ bool ParkBlock(const Config &config, CValidationState &state, diff --git a/src/validation.cpp b/src/validation.cpp --- a/src/validation.cpp +++ b/src/validation.cpp @@ -3161,6 +3161,7 @@ bool InvalidateBlock(const Config &config, CValidationState &state, CBlockIndex *pindex) { + LOCK(cs_main); return g_chainstate.UnwindBlock(config, state, pindex, true); }