diff options
| author | Neha Narula <[email protected]> | 2020-09-13 19:34:52 -0400 |
|---|---|---|
| committer | Neha Narula <[email protected]> | 2020-10-14 10:08:44 -0400 |
| commit | 673247b58cd1252ab7e99f7d63ead05cc100cef2 (patch) | |
| tree | 455a12748f64272b30c9c207182ae9d58336bb25 /src/net_processing.cpp | |
| parent | Move m_orphan_work_set to net_processing (diff) | |
| download | discoin-673247b58cd1252ab7e99f7d63ead05cc100cef2.tar.xz discoin-673247b58cd1252ab7e99f7d63ead05cc100cef2.zip | |
Lock before checking if orphan_work_set is empty; indicate it is guarded
Diffstat (limited to 'src/net_processing.cpp')
| -rw-r--r-- | src/net_processing.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/net_processing.cpp b/src/net_processing.cpp index ab3c323b0..1a50c68a2 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -513,7 +513,7 @@ struct Peer { bool m_should_discourage GUARDED_BY(m_misbehavior_mutex){false}; /** Set of txids to reconsider once their parent transactions have been accepted **/ - std::set<uint256> m_orphan_work_set; + std::set<uint256> m_orphan_work_set GUARDED_BY(g_cs_orphans); Peer(NodeId id) : m_id(id) {} }; @@ -3876,9 +3876,11 @@ bool PeerManager::ProcessMessages(CNode* pfrom, std::atomic<bool>& interruptMsgP if (!pfrom->vRecvGetData.empty()) ProcessGetData(*pfrom, m_chainparams, m_connman, m_mempool, interruptMsgProc); - if (!peer->m_orphan_work_set.empty()) { + { LOCK2(cs_main, g_cs_orphans); - ProcessOrphanTx(peer->m_orphan_work_set); + if (!peer->m_orphan_work_set.empty()) { + ProcessOrphanTx(peer->m_orphan_work_set); + } } if (pfrom->fDisconnect) @@ -3887,7 +3889,10 @@ bool PeerManager::ProcessMessages(CNode* pfrom, std::atomic<bool>& interruptMsgP // this maintains the order of responses // and prevents vRecvGetData to grow unbounded if (!pfrom->vRecvGetData.empty()) return true; - if (!peer->m_orphan_work_set.empty()) return true; + { + LOCK(g_cs_orphans); + if (!peer->m_orphan_work_set.empty()) return true; + } // Don't bother if send buffer is too full to respond anyway if (pfrom->fPauseSend) |