|
|
@ -5787,6 +5787,9 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, |
|
|
|
BlockTransactions resp; |
|
|
|
BlockTransactions resp; |
|
|
|
vRecv >> resp; |
|
|
|
vRecv >> resp; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CBlock block; |
|
|
|
|
|
|
|
bool fBlockRead = false; |
|
|
|
|
|
|
|
{ |
|
|
|
LOCK(cs_main); |
|
|
|
LOCK(cs_main); |
|
|
|
|
|
|
|
|
|
|
|
map<uint256, pair<NodeId, list<QueuedBlock>::iterator> >::iterator it = mapBlocksInFlight.find(resp.blockhash); |
|
|
|
map<uint256, pair<NodeId, list<QueuedBlock>::iterator> >::iterator it = mapBlocksInFlight.find(resp.blockhash); |
|
|
@ -5797,7 +5800,6 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
PartiallyDownloadedBlock& partialBlock = *it->second.second->partialBlock; |
|
|
|
PartiallyDownloadedBlock& partialBlock = *it->second.second->partialBlock; |
|
|
|
CBlock block; |
|
|
|
|
|
|
|
ReadStatus status = partialBlock.FillBlock(block, resp.txn); |
|
|
|
ReadStatus status = partialBlock.FillBlock(block, resp.txn); |
|
|
|
if (status == READ_STATUS_INVALID) { |
|
|
|
if (status == READ_STATUS_INVALID) { |
|
|
|
MarkBlockAsReceived(resp.blockhash); // Reset in-flight state in case of whitelist
|
|
|
|
MarkBlockAsReceived(resp.blockhash); // Reset in-flight state in case of whitelist
|
|
|
@ -5809,7 +5811,10 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, |
|
|
|
std::vector<CInv> invs; |
|
|
|
std::vector<CInv> invs; |
|
|
|
invs.push_back(CInv(MSG_BLOCK | GetFetchFlags(pfrom, chainActive.Tip(), chainparams.GetConsensus()), resp.blockhash)); |
|
|
|
invs.push_back(CInv(MSG_BLOCK | GetFetchFlags(pfrom, chainActive.Tip(), chainparams.GetConsensus()), resp.blockhash)); |
|
|
|
pfrom->PushMessage(NetMsgType::GETDATA, invs); |
|
|
|
pfrom->PushMessage(NetMsgType::GETDATA, invs); |
|
|
|
} else { |
|
|
|
} else |
|
|
|
|
|
|
|
fBlockRead = true; |
|
|
|
|
|
|
|
} // Don't hold cs_main when we call into ProcessNewBlock
|
|
|
|
|
|
|
|
if (fBlockRead) { |
|
|
|
CValidationState state; |
|
|
|
CValidationState state; |
|
|
|
ProcessNewBlock(state, chainparams, pfrom, &block, false, NULL, &connman); |
|
|
|
ProcessNewBlock(state, chainparams, pfrom, &block, false, NULL, &connman); |
|
|
|
int nDoS; |
|
|
|
int nDoS; |
|
|
|