From c58c249a5b694c88122589fedbef4e2f13f08bb4 Mon Sep 17 00:00:00 2001 From: Anthony Towns Date: Fri, 23 Dec 2022 00:21:10 +1000 Subject: net_processing: indicate more work to do when orphans are ready to reconsider When PR#15644 made orphan processing interruptible, it also introduced a potential 100ms delay between processing of the first and second newly reconsiderable orphan, because it didn't check if the orphan work set was non-empty after invoking ProcessMessage(). This adds that check, so that ProcessMessages() will return true if there are orphans to process, usually avoiding the 100ms delay in CConnman::ThreadMessageHandler(). --- src/txorphanage.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/txorphanage.cpp') diff --git a/src/txorphanage.cpp b/src/txorphanage.cpp index f82cd886f9..eb74d3451e 100644 --- a/src/txorphanage.cpp +++ b/src/txorphanage.cpp @@ -194,6 +194,18 @@ CTransactionRef TxOrphanage::GetTxToReconsider(NodeId peer) return nullptr; } +bool TxOrphanage::HaveTxToReconsider(NodeId peer) +{ + LOCK(m_mutex); + + auto work_set_it = m_peer_work_set.find(peer); + if (work_set_it != m_peer_work_set.end()) { + auto& work_set = work_set_it->second; + return !work_set.empty(); + } + return false; +} + void TxOrphanage::EraseForBlock(const CBlock& block) { LOCK(m_mutex); -- cgit v1.2.3