mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-11 22:50:59 +01:00
rpc: Remove cs_main lock from blockToJSON and blockHeaderToJSON
This commit is contained in:
17
src/rest.cpp
17
src/rest.cpp
@@ -144,10 +144,12 @@ static bool rest_headers(HTTPRequest* req,
|
||||
if (!ParseHashStr(hashStr, hash))
|
||||
return RESTERR(req, HTTP_BAD_REQUEST, "Invalid hash: " + hashStr);
|
||||
|
||||
const CBlockIndex* tip = nullptr;
|
||||
std::vector<const CBlockIndex *> headers;
|
||||
headers.reserve(count);
|
||||
{
|
||||
LOCK(cs_main);
|
||||
tip = chainActive.Tip();
|
||||
const CBlockIndex* pindex = LookupBlockIndex(hash);
|
||||
while (pindex != nullptr && chainActive.Contains(pindex)) {
|
||||
headers.push_back(pindex);
|
||||
@@ -178,11 +180,8 @@ static bool rest_headers(HTTPRequest* req,
|
||||
}
|
||||
case RetFormat::JSON: {
|
||||
UniValue jsonHeaders(UniValue::VARR);
|
||||
{
|
||||
LOCK(cs_main);
|
||||
for (const CBlockIndex *pindex : headers) {
|
||||
jsonHeaders.push_back(blockheaderToJSON(pindex));
|
||||
}
|
||||
for (const CBlockIndex *pindex : headers) {
|
||||
jsonHeaders.push_back(blockheaderToJSON(tip, pindex));
|
||||
}
|
||||
std::string strJSON = jsonHeaders.write() + "\n";
|
||||
req->WriteHeader("Content-Type", "application/json");
|
||||
@@ -210,8 +209,10 @@ static bool rest_block(HTTPRequest* req,
|
||||
|
||||
CBlock block;
|
||||
CBlockIndex* pblockindex = nullptr;
|
||||
CBlockIndex* tip = nullptr;
|
||||
{
|
||||
LOCK(cs_main);
|
||||
tip = chainActive.Tip();
|
||||
pblockindex = LookupBlockIndex(hash);
|
||||
if (!pblockindex) {
|
||||
return RESTERR(req, HTTP_NOT_FOUND, hashStr + " not found");
|
||||
@@ -243,11 +244,7 @@ static bool rest_block(HTTPRequest* req,
|
||||
}
|
||||
|
||||
case RetFormat::JSON: {
|
||||
UniValue objBlock;
|
||||
{
|
||||
LOCK(cs_main);
|
||||
objBlock = blockToJSON(block, pblockindex, showTxDetails);
|
||||
}
|
||||
UniValue objBlock = blockToJSON(block, tip, pblockindex, showTxDetails);
|
||||
std::string strJSON = objBlock.write() + "\n";
|
||||
req->WriteHeader("Content-Type", "application/json");
|
||||
req->WriteReply(HTTP_OK, strJSON);
|
||||
|
||||
Reference in New Issue
Block a user