aboutsummaryrefslogtreecommitdiff
path: root/src/rest.cpp
diff options
context:
space:
mode:
authorJoão Barbosa <joao.paulo.barbosa@gmail.com>2018-01-11 22:23:19 +0000
committerJoão Barbosa <joao.paulo.barbosa@gmail.com>2018-09-09 18:02:24 +0100
commitb9f226b41f989f5c07fe57801701a39c14a6e173 (patch)
tree948a78b3718a6bbddeb367bff7ff7e1270544ac9 /src/rest.cpp
parent343b98cbcd52854ffffaca7ada72f5522117ac7f (diff)
downloadbitcoin-b9f226b41f989f5c07fe57801701a39c14a6e173.tar.xz
rpc: Remove cs_main lock from blockToJSON and blockHeaderToJSON
Diffstat (limited to 'src/rest.cpp')
-rw-r--r--src/rest.cpp17
1 files changed, 7 insertions, 10 deletions
diff --git a/src/rest.cpp b/src/rest.cpp
index 6ba15172fa..42d9a26195 100644
--- a/src/rest.cpp
+++ b/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);