Skip to content

Commit 21154ff

Browse files
committed
net_processing: move CNode data access out of lock
CNode::m_relays_tx and CNode::m_bloom_filter_loaded access don't require the Peer::TxRelay::m_bloom_filter_mutex lock, so move them out of the lock scope. See bitcoin/bitcoin#21160 (comment) and bitcoin/bitcoin#21160 (comment).
1 parent 3297f5c commit 21154ff

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

src/net_processing.cpp

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2715,8 +2715,10 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
27152715
pfrom.m_limited_node = (!(nServices & NODE_NETWORK) && (nServices & NODE_NETWORK_LIMITED));
27162716

27172717
if (peer->m_tx_relay != nullptr) {
2718-
LOCK(peer->m_tx_relay->m_bloom_filter_mutex);
2719-
peer->m_tx_relay->m_relay_txs = fRelay; // set to true after we get the first filter* message
2718+
{
2719+
LOCK(peer->m_tx_relay->m_bloom_filter_mutex);
2720+
peer->m_tx_relay->m_relay_txs = fRelay; // set to true after we get the first filter* message
2721+
}
27202722
if (fRelay) pfrom.m_relays_txs = true;
27212723
}
27222724

@@ -4030,10 +4032,12 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
40304032
}
40314033
else if (peer->m_tx_relay != nullptr)
40324034
{
4033-
LOCK(peer->m_tx_relay->m_bloom_filter_mutex);
4034-
peer->m_tx_relay->m_bloom_filter.reset(new CBloomFilter(filter));
4035+
{
4036+
LOCK(peer->m_tx_relay->m_bloom_filter_mutex);
4037+
peer->m_tx_relay->m_bloom_filter.reset(new CBloomFilter(filter));
4038+
peer->m_tx_relay->m_relay_txs = true;
4039+
}
40354040
pfrom.m_bloom_filter_loaded = true;
4036-
peer->m_tx_relay->m_relay_txs = true;
40374041
pfrom.m_relays_txs = true;
40384042
}
40394043
return;
@@ -4076,10 +4080,13 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
40764080
if (peer->m_tx_relay == nullptr) {
40774081
return;
40784082
}
4079-
LOCK(peer->m_tx_relay->m_bloom_filter_mutex);
4080-
peer->m_tx_relay->m_bloom_filter = nullptr;
4083+
4084+
{
4085+
LOCK(peer->m_tx_relay->m_bloom_filter_mutex);
4086+
peer->m_tx_relay->m_bloom_filter = nullptr;
4087+
peer->m_tx_relay->m_relay_txs = true;
4088+
}
40814089
pfrom.m_bloom_filter_loaded = false;
4082-
peer->m_tx_relay->m_relay_txs = true;
40834090
pfrom.m_relays_txs = true;
40844091
return;
40854092
}

0 commit comments

Comments
 (0)