rpc: Avoid permanent cs_main lock in getblockheader

This commit is contained in:
João Barbosa 2018-01-11 14:16:44 +00:00
parent f7e182a973
commit f12e1d0b51

View file

@ -747,15 +747,20 @@ static UniValue getblockheader(const JSONRPCRequest& request)
+ HelpExampleRpc("getblockheader", "\"00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09\"") + HelpExampleRpc("getblockheader", "\"00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09\"")
); );
LOCK(cs_main);
uint256 hash(ParseHashV(request.params[0], "hash")); uint256 hash(ParseHashV(request.params[0], "hash"));
bool fVerbose = true; bool fVerbose = true;
if (!request.params[1].isNull()) if (!request.params[1].isNull())
fVerbose = request.params[1].get_bool(); fVerbose = request.params[1].get_bool();
const CBlockIndex* pblockindex = LookupBlockIndex(hash); const CBlockIndex* pblockindex;
const CBlockIndex* tip;
{
LOCK(cs_main);
pblockindex = LookupBlockIndex(hash);
tip = chainActive.Tip();
}
if (!pblockindex) { if (!pblockindex) {
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Block not found"); throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Block not found");
} }
@ -768,7 +773,7 @@ static UniValue getblockheader(const JSONRPCRequest& request)
return strHex; return strHex;
} }
return blockheaderToJSON(chainActive.Tip(), pblockindex); return blockheaderToJSON(tip, pblockindex);
} }
static CBlock GetBlockChecked(const CBlockIndex* pblockindex) static CBlock GetBlockChecked(const CBlockIndex* pblockindex)