From 8d220417cd7bc34464e28a4861a885193ec091c2 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Wed, 13 Feb 2019 18:07:16 -0800 Subject: Optimization: don't add txn back to mempool after 10 invalidates --- src/validation.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/validation.cpp') diff --git a/src/validation.cpp b/src/validation.cpp index d0d2227664..c112fbdcc0 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -2797,6 +2797,7 @@ bool CChainState::InvalidateBlock(CValidationState& state, const CChainParams& c { CBlockIndex* to_mark_failed = pindex; bool pindex_was_in_chain = false; + int disconnected = 0; // Disconnect (descendants of) pindex, and mark them invalid. while (true) { @@ -2816,8 +2817,10 @@ bool CChainState::InvalidateBlock(CValidationState& state, const CChainParams& c bool ret = DisconnectTip(state, chainparams, &disconnectpool); // DisconnectTip will add transactions to disconnectpool. // Adjust the mempool to be consistent with the new tip, adding - // transactions back to the mempool if disconnecting was succesful. - UpdateMempoolForReorg(disconnectpool, /* fAddToMempool = */ ret); + // transactions back to the mempool if disconnecting was succesful, + // and we're not doing a very deep invalidation (in which case + // keeping the mempool up to date is probably futile anyway). + UpdateMempoolForReorg(disconnectpool, /* fAddToMempool = */ (++disconnected <= 10) && ret); if (!ret) return false; assert(invalid_walk_tip->pprev == chainActive.Tip()); -- cgit v1.2.3