From e2f30d547f733ee33e7814ab500c08d12958e66a Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Tue, 18 Nov 2014 16:30:51 +0100 Subject: [PATCH] Properly lock cs_main in rest_block --- src/rest.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/rest.cpp b/src/rest.cpp index 89075887a..9a8793a51 100644 --- a/src/rest.cpp +++ b/src/rest.cpp @@ -11,6 +11,7 @@ #include "core/transaction.h" #include "version.h" #include "main.h" +#include "sync.h" using namespace std; using namespace json_spirit; @@ -80,13 +81,17 @@ static bool rest_block(AcceptedConnection *conn, if (!ParseHashStr(hashStr, hash)) throw RESTERR(HTTP_BAD_REQUEST, "Invalid hash: " + hashStr); - if (mapBlockIndex.count(hash) == 0) - throw RESTERR(HTTP_NOT_FOUND, hashStr + " not found"); - CBlock block; - CBlockIndex* pblockindex = mapBlockIndex[hash]; - if (!ReadBlockFromDisk(block, pblockindex)) - throw RESTERR(HTTP_NOT_FOUND, hashStr + " not found"); + CBlockIndex* pblockindex = NULL; + { + LOCK(cs_main); + if (mapBlockIndex.count(hash) == 0) + throw RESTERR(HTTP_NOT_FOUND, hashStr + " not found"); + + pblockindex = mapBlockIndex[hash]; + if (!ReadBlockFromDisk(block, pblockindex)) + throw RESTERR(HTTP_NOT_FOUND, hashStr + " not found"); + } CDataStream ssBlock(SER_NETWORK, PROTOCOL_VERSION); ssBlock << block;