diff options
author | João Barbosa <joao.paulo.barbosa@gmail.com> | 2018-01-11 22:23:19 +0000 |
---|---|---|
committer | João Barbosa <joao.paulo.barbosa@gmail.com> | 2018-09-09 18:02:24 +0100 |
commit | b9f226b41f989f5c07fe57801701a39c14a6e173 (patch) | |
tree | 948a78b3718a6bbddeb367bff7ff7e1270544ac9 /src/rest.cpp | |
parent | 343b98cbcd52854ffffaca7ada72f5522117ac7f (diff) |
rpc: Remove cs_main lock from blockToJSON and blockHeaderToJSON
Diffstat (limited to 'src/rest.cpp')
-rw-r--r-- | src/rest.cpp | 17 |
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); |