diff options
author | Anthony Towns <aj@erisian.com.au> | 2022-10-07 14:25:47 +1000 |
---|---|---|
committer | Anthony Towns <aj@erisian.com.au> | 2022-10-11 23:35:32 +1000 |
commit | 733d85f79cde353d8c9b54370f296b1031fa33d9 (patch) | |
tree | d82f4afe95a9e61ff84eeac104d118013c44a372 /src/txorphanage.cpp | |
parent | a936f41a5d5f7bb97425f82ec64dfae62e840a56 (diff) |
Move all g_cs_orphans locking to txorphanage
Diffstat (limited to 'src/txorphanage.cpp')
-rw-r--r-- | src/txorphanage.cpp | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/txorphanage.cpp b/src/txorphanage.cpp index 4cccb1affb..bdebfc161f 100644 --- a/src/txorphanage.cpp +++ b/src/txorphanage.cpp @@ -15,11 +15,11 @@ static constexpr int64_t ORPHAN_TX_EXPIRE_TIME = 20 * 60; /** Minimum time between orphan transactions expire time checks in seconds */ static constexpr int64_t ORPHAN_TX_EXPIRE_INTERVAL = 5 * 60; -RecursiveMutex g_cs_orphans; +RecursiveMutex TxOrphanage::g_cs_orphans; bool TxOrphanage::AddTx(const CTransactionRef& tx, NodeId peer) { - AssertLockHeld(g_cs_orphans); + LOCK(g_cs_orphans); const uint256& hash = tx->GetHash(); if (m_orphans.count(hash)) @@ -55,6 +55,12 @@ bool TxOrphanage::AddTx(const CTransactionRef& tx, NodeId peer) int TxOrphanage::EraseTx(const uint256& txid) { + LOCK(g_cs_orphans); + return _EraseTx(txid); +} + +int TxOrphanage::_EraseTx(const uint256& txid) +{ AssertLockHeld(g_cs_orphans); std::map<uint256, OrphanTx>::iterator it = m_orphans.find(txid); if (it == m_orphans.end()) @@ -87,7 +93,7 @@ int TxOrphanage::EraseTx(const uint256& txid) void TxOrphanage::EraseForPeer(NodeId peer) { - AssertLockHeld(g_cs_orphans); + LOCK(g_cs_orphans); m_peer_work_set.erase(peer); @@ -98,7 +104,7 @@ void TxOrphanage::EraseForPeer(NodeId peer) std::map<uint256, OrphanTx>::iterator maybeErase = iter++; // increment to avoid iterator becoming invalid if (maybeErase->second.fromPeer == peer) { - nErased += EraseTx(maybeErase->second.tx->GetHash()); + nErased += _EraseTx(maybeErase->second.tx->GetHash()); } } if (nErased > 0) LogPrint(BCLog::MEMPOOL, "Erased %d orphan tx from peer=%d\n", nErased, peer); @@ -106,7 +112,7 @@ void TxOrphanage::EraseForPeer(NodeId peer) void TxOrphanage::LimitOrphans(unsigned int max_orphans) { - AssertLockHeld(g_cs_orphans); + LOCK(g_cs_orphans); unsigned int nEvicted = 0; static int64_t nNextSweep; @@ -120,7 +126,7 @@ void TxOrphanage::LimitOrphans(unsigned int max_orphans) { std::map<uint256, OrphanTx>::iterator maybeErase = iter++; if (maybeErase->second.nTimeExpire <= nNow) { - nErased += EraseTx(maybeErase->second.tx->GetHash()); + nErased += _EraseTx(maybeErase->second.tx->GetHash()); } else { nMinExpTime = std::min(maybeErase->second.nTimeExpire, nMinExpTime); } @@ -134,7 +140,7 @@ void TxOrphanage::LimitOrphans(unsigned int max_orphans) { // Evict a random orphan: size_t randompos = rng.randrange(m_orphan_list.size()); - EraseTx(m_orphan_list[randompos]->first); + _EraseTx(m_orphan_list[randompos]->first); ++nEvicted; } if (nEvicted > 0) LogPrint(BCLog::MEMPOOL, "orphanage overflow, removed %u tx\n", nEvicted); @@ -142,7 +148,7 @@ void TxOrphanage::LimitOrphans(unsigned int max_orphans) void TxOrphanage::AddChildrenToWorkSet(const CTransaction& tx, NodeId peer) { - AssertLockHeld(g_cs_orphans); + LOCK(g_cs_orphans); // Get this peer's work set, emplacing an empty set it didn't exist std::set<uint256>& orphan_work_set = m_peer_work_set.try_emplace(peer).first->second; @@ -169,7 +175,7 @@ bool TxOrphanage::HaveTx(const GenTxid& gtxid) const CTransactionRef TxOrphanage::GetTxToReconsider(NodeId peer, NodeId& originator, bool& more) { - AssertLockHeld(g_cs_orphans); + LOCK(g_cs_orphans); auto work_set_it = m_peer_work_set.find(peer); if (work_set_it != m_peer_work_set.end()) { @@ -215,7 +221,7 @@ void TxOrphanage::EraseForBlock(const CBlock& block) if (vOrphanErase.size()) { int nErased = 0; for (const uint256& orphanHash : vOrphanErase) { - nErased += EraseTx(orphanHash); + nErased += _EraseTx(orphanHash); } LogPrint(BCLog::MEMPOOL, "Erased %d orphan tx included or conflicted by block\n", nErased); } |