mirror of
https://github.com/kvazar-network/kevacoin.git
synced 2025-01-25 22:34:27 +00:00
Merge #11618: rpc: Lock cs_main in blockToJSON/blockheaderToJSON
a9b6ba0b7 Add missing cs_main locks when calling blockToJSON/blockheaderToJSON (practicalswift) Pull request description: `blockToJSON(...)` and `blockheaderToJSON(...)` read the variable `chainActive` which requires holding the mutex `cs_main`. So does `GetDifficulty(...)`. Tree-SHA512: bfb94f5e3238accbf6a4daddde49d53f1891c38ae9b07e25b3098c485747159258f64bb66a50e147b32beac601de89d9d04ff717b6c4f1460d329c90a53d3333
This commit is contained in:
commit
87d90efd69
@ -178,9 +178,12 @@ static bool rest_headers(HTTPRequest* req,
|
|||||||
}
|
}
|
||||||
case RF_JSON: {
|
case RF_JSON: {
|
||||||
UniValue jsonHeaders(UniValue::VARR);
|
UniValue jsonHeaders(UniValue::VARR);
|
||||||
|
{
|
||||||
|
LOCK(cs_main);
|
||||||
for (const CBlockIndex *pindex : headers) {
|
for (const CBlockIndex *pindex : headers) {
|
||||||
jsonHeaders.push_back(blockheaderToJSON(pindex));
|
jsonHeaders.push_back(blockheaderToJSON(pindex));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
std::string strJSON = jsonHeaders.write() + "\n";
|
std::string strJSON = jsonHeaders.write() + "\n";
|
||||||
req->WriteHeader("Content-Type", "application/json");
|
req->WriteHeader("Content-Type", "application/json");
|
||||||
req->WriteReply(HTTP_OK, strJSON);
|
req->WriteReply(HTTP_OK, strJSON);
|
||||||
@ -239,7 +242,11 @@ static bool rest_block(HTTPRequest* req,
|
|||||||
}
|
}
|
||||||
|
|
||||||
case RF_JSON: {
|
case RF_JSON: {
|
||||||
UniValue objBlock = blockToJSON(block, pblockindex, showTxDetails);
|
UniValue objBlock;
|
||||||
|
{
|
||||||
|
LOCK(cs_main);
|
||||||
|
objBlock = blockToJSON(block, pblockindex, showTxDetails);
|
||||||
|
}
|
||||||
std::string strJSON = objBlock.write() + "\n";
|
std::string strJSON = objBlock.write() + "\n";
|
||||||
req->WriteHeader("Content-Type", "application/json");
|
req->WriteHeader("Content-Type", "application/json");
|
||||||
req->WriteReply(HTTP_OK, strJSON);
|
req->WriteReply(HTTP_OK, strJSON);
|
||||||
|
@ -78,6 +78,7 @@ double GetDifficulty(const CBlockIndex* blockindex)
|
|||||||
|
|
||||||
UniValue blockheaderToJSON(const CBlockIndex* blockindex)
|
UniValue blockheaderToJSON(const CBlockIndex* blockindex)
|
||||||
{
|
{
|
||||||
|
AssertLockHeld(cs_main);
|
||||||
UniValue result(UniValue::VOBJ);
|
UniValue result(UniValue::VOBJ);
|
||||||
result.push_back(Pair("hash", blockindex->GetBlockHash().GetHex()));
|
result.push_back(Pair("hash", blockindex->GetBlockHash().GetHex()));
|
||||||
int confirmations = -1;
|
int confirmations = -1;
|
||||||
@ -106,6 +107,7 @@ UniValue blockheaderToJSON(const CBlockIndex* blockindex)
|
|||||||
|
|
||||||
UniValue blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool txDetails)
|
UniValue blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool txDetails)
|
||||||
{
|
{
|
||||||
|
AssertLockHeld(cs_main);
|
||||||
UniValue result(UniValue::VOBJ);
|
UniValue result(UniValue::VOBJ);
|
||||||
result.push_back(Pair("hash", blockindex->GetBlockHash().GetHex()));
|
result.push_back(Pair("hash", blockindex->GetBlockHash().GetHex()));
|
||||||
int confirmations = -1;
|
int confirmations = -1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user