diff options
| author | João Barbosa <[email protected]> | 2018-01-11 22:23:19 +0000 |
|---|---|---|
| committer | João Barbosa <[email protected]> | 2018-09-09 18:02:24 +0100 |
| commit | b9f226b41f989f5c07fe57801701a39c14a6e173 (patch) | |
| tree | 948a78b3718a6bbddeb367bff7ff7e1270544ac9 /src/rest.cpp | |
| parent | rpc: Specify chain tip instead of chain in GetDifficulty (diff) | |
| download | discoin-b9f226b41f989f5c07fe57801701a39c14a6e173.tar.xz discoin-b9f226b41f989f5c07fe57801701a39c14a6e173.zip | |
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 6ba15172f..42d9a2619 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); |