mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-20 07:09:15 +01:00
validation: don't reallocate cache for short-lived CCoinsViewCache
A few temporary `CCoinsViewCache`'s are destructed right after the `Flush()`, therefore it is not necessary to call `ReallocateCache` to recreate them right before they're killed anyway. * `Flush()` - retains existing functionality; * `Flush(/*will_reuse_cache=*/false)` - skips destruction and reallocation of the parent cache since it will soon go out of scope anyway; For the `will_reuse_cache` parameter we want to see exactly which ones will reallocate memory and which won't - since both can be valid usages. This change was based on a subset of https://github.com/bitcoin/bitcoin/pull/28945. Co-authored-by: Martin Ankerl <martin.ankerl@gmail.com>
This commit is contained in:
@@ -3036,7 +3036,7 @@ bool Chainstate::DisconnectTip(BlockValidationState& state, DisconnectedBlockTra
|
||||
LogError("DisconnectTip(): DisconnectBlock %s failed\n", pindexDelete->GetBlockHash().ToString());
|
||||
return false;
|
||||
}
|
||||
bool flushed = view.Flush();
|
||||
bool flushed = view.Flush(/*will_reuse_cache=*/false); // local CCoinsViewCache goes out of scope
|
||||
assert(flushed);
|
||||
}
|
||||
LogDebug(BCLog::BENCH, "- Disconnect block: %.2fms\n",
|
||||
@@ -3171,7 +3171,7 @@ bool Chainstate::ConnectTip(
|
||||
Ticks<MillisecondsDouble>(time_3 - time_2),
|
||||
Ticks<SecondsDouble>(m_chainman.time_connect_total),
|
||||
Ticks<MillisecondsDouble>(m_chainman.time_connect_total) / m_chainman.num_blocks_total);
|
||||
bool flushed = view.Flush();
|
||||
bool flushed = view.Flush(/*will_reuse_cache=*/false); // local CCoinsViewCache goes out of scope
|
||||
assert(flushed);
|
||||
}
|
||||
const auto time_4{SteadyClock::now()};
|
||||
@@ -4950,7 +4950,7 @@ bool Chainstate::ReplayBlocks()
|
||||
}
|
||||
|
||||
cache.SetBestBlock(pindexNew->GetBlockHash());
|
||||
cache.Flush();
|
||||
cache.Flush(/*will_reuse_cache=*/false); // local CCoinsViewCache goes out of scope
|
||||
m_chainman.GetNotifications().progress(bilingual_str{}, 100, false);
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user