From bb0585779472962f40d9cdd9c6532132850d371c Mon Sep 17 00:00:00 2001 From: James O'Beirne Date: Fri, 8 Sep 2023 06:29:32 -0400 Subject: [PATCH] refuse to activate a UTXO snapshot if mempool not empty This ensures that we avoid any unexpected conditions inherent in transferring non-empty mempools across chainstates. Note that this should never happen in practice given that snapshot activation will not occur outside of IBD, based upon the height checks in `loadtxoutset`. --- src/validation.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/validation.cpp b/src/validation.cpp index 82aafd97f87..30b3dde74f0 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -5185,6 +5185,14 @@ bool ChainstateManager::ActivateSnapshot( return false; } + { + LOCK(::cs_main); + if (Assert(m_active_chainstate->GetMempool())->size() > 0) { + LogPrintf("[snapshot] can't activate a snapshot when mempool not empty\n"); + return false; + } + } + int64_t current_coinsdb_cache_size{0}; int64_t current_coinstip_cache_size{0};