mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-19 23:03:45 +01:00
refactor: Use MockableSteadyClock in ReportHeadersPresync
This allows the clock to be mockable in tests. Also, replace cs_main
with GetMutex() while touching this function.
Also, use the ElapseSteady test helper in the p2p_headers_presync fuzz
target to make it more deterministic.
The m_last_presync_update variable is a global that is not reset in
ResetAndInitialize. However, it is only used for logging, so completely
disable it for now.
Without this patch, the tool would report a diff:
cargo run --manifest-path ./contrib/devtools/deterministic-fuzz-coverage/Cargo.toml -- $PWD/bld-cmake/ $PWD/../qa-assets/fuzz_corpora/ p2p_headers_presync 32
...
4468| 81| auto now = std::chrono::steady_clock::now();
4469| 81| if (now < m_last_presync_update + std::chrono::milliseconds{250}) return;
- ^80
+ ^79
...
This commit is contained in:
@@ -4456,16 +4456,16 @@ bool ChainstateManager::ProcessNewBlockHeaders(std::span<const CBlockHeader> hea
|
||||
|
||||
void ChainstateManager::ReportHeadersPresync(const arith_uint256& work, int64_t height, int64_t timestamp)
|
||||
{
|
||||
AssertLockNotHeld(cs_main);
|
||||
AssertLockNotHeld(GetMutex());
|
||||
{
|
||||
LOCK(cs_main);
|
||||
LOCK(GetMutex());
|
||||
// Don't report headers presync progress if we already have a post-minchainwork header chain.
|
||||
// This means we lose reporting for potentially legitimate, but unlikely, deep reorgs, but
|
||||
// prevent attackers that spam low-work headers from filling our logs.
|
||||
if (m_best_header->nChainWork >= UintToArith256(GetConsensus().nMinimumChainWork)) return;
|
||||
// Rate limit headers presync updates to 4 per second, as these are not subject to DoS
|
||||
// protection.
|
||||
auto now = std::chrono::steady_clock::now();
|
||||
auto now = MockableSteadyClock::now();
|
||||
if (now < m_last_presync_update + std::chrono::milliseconds{250}) return;
|
||||
m_last_presync_update = now;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user