aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorglozow <gloriajzhao@gmail.com>2022-10-27 13:38:01 +0100
committerglozow <gloriajzhao@gmail.com>2022-10-27 13:38:08 +0100
commitd22cc74837a30022b219bee3b6ed73fd47e24d07 (patch)
tree3c48266a0f3f99c036cbe259e882ed94b50fc3e2
parentbb5bcf32baeb252d6f160f93b99d3e51715275c8 (diff)
parente23def8fcc4558b1a49ee8f2dd608fe91ced1d6d (diff)
downloadbitcoin-d22cc74837a30022b219bee3b6ed73fd47e24d07.tar.xz
Merge bitcoin/bitcoin#26382: [24.x] p2p: Handle IsContinuationOfLowWorkHeadersSync return value correctly when new headers sync is started
e23def8fcc4558b1a49ee8f2dd608fe91ced1d6d [net processing] Handle IsContinuationOfLowWorkHeadersSync return value correctly when new headers sync is started (dergoegge) Pull request description: Backport of #26355. ACKs for top commit: dergoegge: ACK e23def8fcc4558b1a49ee8f2dd608fe91ced1d6d stickies-v: ACK e23def8fcc4558b1a49ee8f2dd608fe91ced1d6d Tree-SHA512: 051ecb08f1f96557b5b6d01cc9d29a5dfabbb48afffd52cba662251c23277938fcbb6f207fc7575774ef627a9484ceb056cc75476861b920723c35c2f5da36c8
-rw-r--r--src/net_processing.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/net_processing.cpp b/src/net_processing.cpp
index 1c44ec9903..a6299be403 100644
--- a/src/net_processing.cpp
+++ b/src/net_processing.cpp
@@ -2559,14 +2559,22 @@ bool PeerManagerImpl::TryLowWorkHeadersSync(Peer& peer, CNode& pfrom, const CBlo
// Now a HeadersSyncState object for tracking this synchronization is created,
// process the headers using it as normal.
- return IsContinuationOfLowWorkHeadersSync(peer, pfrom, headers);
+ if (!IsContinuationOfLowWorkHeadersSync(peer, pfrom, headers)) {
+ // Something went wrong, reset the headers sync.
+ peer.m_headers_sync.reset(nullptr);
+ LOCK(m_headers_presync_mutex);
+ m_headers_presync_stats.erase(peer.m_id);
+ }
} else {
LogPrint(BCLog::NET, "Ignoring low-work chain (height=%u) from peer=%d\n", chain_start_header->nHeight + headers.size(), pfrom.GetId());
- // Since this is a low-work headers chain, no further processing is required.
- headers = {};
- return true;
}
+
+ // The peer has not yet given us a chain that meets our work threshold,
+ // so we want to prevent further processing of the headers in any case.
+ headers = {};
+ return true;
}
+
return false;
}