mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-11 14:38:29 +01:00
Merge #9014: Fix block-connection performance regression
dd0df81Document ConnectBlock connectTrace postconditions (Matt Corallo)2d6e561Switch pblock in ProcessNewBlock to a shared_ptr (Matt Corallo)2736c44Make the optional pblock in ActivateBestChain a shared_ptr (Matt Corallo)ae4db44Create a shared_ptr for the block we're connecting in ActivateBCS (Matt Corallo)fd9d890Keep blocks as shared_ptrs, instead of copying txn in ConnectTip (Matt Corallo)6fdd43bAdd struct to track block-connect-time-generated info for callbacks (Matt Corallo)
This commit is contained in:
@@ -1894,7 +1894,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
||||
BlockTransactions resp;
|
||||
vRecv >> resp;
|
||||
|
||||
CBlock block;
|
||||
std::shared_ptr<CBlock> pblock = std::make_shared<CBlock>();
|
||||
bool fBlockRead = false;
|
||||
{
|
||||
LOCK(cs_main);
|
||||
@@ -1907,7 +1907,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
||||
}
|
||||
|
||||
PartiallyDownloadedBlock& partialBlock = *it->second.second->partialBlock;
|
||||
ReadStatus status = partialBlock.FillBlock(block, resp.txn);
|
||||
ReadStatus status = partialBlock.FillBlock(*pblock, resp.txn);
|
||||
if (status == READ_STATUS_INVALID) {
|
||||
MarkBlockAsReceived(resp.blockhash); // Reset in-flight state in case of whitelist
|
||||
Misbehaving(pfrom->GetId(), 100);
|
||||
@@ -1950,7 +1950,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
||||
bool fNewBlock = false;
|
||||
// Since we requested this block (it was in mapBlocksInFlight), force it to be processed,
|
||||
// even if it would not be a candidate for new tip (missing previous block, chain not long enough, etc)
|
||||
ProcessNewBlock(chainparams, &block, true, NULL, &fNewBlock);
|
||||
ProcessNewBlock(chainparams, pblock, true, NULL, &fNewBlock);
|
||||
if (fNewBlock)
|
||||
pfrom->nLastBlockTime = GetTime();
|
||||
}
|
||||
@@ -2111,17 +2111,17 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
||||
|
||||
else if (strCommand == NetMsgType::BLOCK && !fImporting && !fReindex) // Ignore blocks received while importing
|
||||
{
|
||||
CBlock block;
|
||||
vRecv >> block;
|
||||
std::shared_ptr<CBlock> pblock = std::make_shared<CBlock>();
|
||||
vRecv >> *pblock;
|
||||
|
||||
LogPrint("net", "received block %s peer=%d\n", block.GetHash().ToString(), pfrom->id);
|
||||
LogPrint("net", "received block %s peer=%d\n", pblock->GetHash().ToString(), pfrom->id);
|
||||
|
||||
// Process all blocks from whitelisted peers, even if not requested,
|
||||
// unless we're still syncing with the network.
|
||||
// Such an unrequested block may still be processed, subject to the
|
||||
// conditions in AcceptBlock().
|
||||
bool forceProcessing = pfrom->fWhitelisted && !IsInitialBlockDownload();
|
||||
const uint256 hash(block.GetHash());
|
||||
const uint256 hash(pblock->GetHash());
|
||||
{
|
||||
LOCK(cs_main);
|
||||
// Also always process if we requested the block explicitly, as we may
|
||||
@@ -2132,7 +2132,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
||||
mapBlockSource.emplace(hash, std::make_pair(pfrom->GetId(), true));
|
||||
}
|
||||
bool fNewBlock = false;
|
||||
ProcessNewBlock(chainparams, &block, forceProcessing, NULL, &fNewBlock);
|
||||
ProcessNewBlock(chainparams, pblock, forceProcessing, NULL, &fNewBlock);
|
||||
if (fNewBlock)
|
||||
pfrom->nLastBlockTime = GetTime();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user