From 86dbe6981fd2304f43dc19bd8a618b2752cee81b Mon Sep 17 00:00:00 2001 From: Valentin Balaschenko <13349202+vlntb@users.noreply.github.com> Date: Mon, 6 Jul 2026 13:44:44 +0100 Subject: [PATCH] lock contention parity --- src/xrpld/app/ledger/LedgerHistory.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/xrpld/app/ledger/LedgerHistory.cpp b/src/xrpld/app/ledger/LedgerHistory.cpp index c14f3f7ae0..e33f87d611 100644 --- a/src/xrpld/app/ledger/LedgerHistory.cpp +++ b/src/xrpld/app/ledger/LedgerHistory.cpp @@ -504,17 +504,25 @@ LedgerHistory::clearLedgerCachePrior(LedgerIndex seq) std::size_t cacheSize = 0; std::size_t indexSize = 0; + std::vector keys; { auto lock = ledger_maps_.lock(); - for (LedgerHash it : lock->by_hash->getKeys()) + keys = lock->by_hash->getKeys(); + } + + for (LedgerHash const& it : keys) + { + auto const ledger = getLedgerByHash(it); + if (!ledger || ledger->header().seq < seq) { - auto const ledger = getLedgerByHash(it); - if (!ledger || ledger->header().seq < seq) - { - lock->by_hash->del(it, false); - ++hashesCleared; - } + auto lock = ledger_maps_.lock(); + lock->by_hash->del(it, false); + ++hashesCleared; } + } + + { + auto lock = ledger_maps_.lock(); cacheSize = lock->by_hash->size(); auto it = lock->by_index.begin();