Skip to content

Commit f089a08

Browse files
committed
Merge bitcoin/bitcoin#24692: refactoring: [Net Processing] Follow-ups to #21160
a40978d [fuzz] Assert that Peer.m_tx_relay.m_relay_txs has been set correctly (John Newbery) 0bca5f2 [net processing] PushNodeVersion() takes a const Peer& (John Newbery) 21154ff net_processing: move CNode data access out of lock (John Newbery) Pull request description: #21160 ([net/net processing]: Move tx inventory into net_processing) had some unaddressed review comments when it was merged. This branch addresses those comments. ACKs for top commit: MarcoFalke: review ACK a40978d dergoegge: ACK a40978d ajtowns: ACK a40978d Tree-SHA512: 46624e275f918c5f32d0adab0766e9b3ef8ebdbc74a3c8886d8a2e2ff1079029dcc371b40ef0d787609e9c05219b7456f3e2dfe4fb0cb7bf23ef966769aef1a1
2 parents ecf692b + a40978d commit f089a08

File tree

2 files changed

+22
-12
lines changed

2 files changed

+22
-12
lines changed

src/net_processing.cpp

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,7 @@ class PeerManagerImpl final : public PeerManager
426426
EXCLUSIVE_LOCKS_REQUIRED(::cs_main);
427427

428428
/** Send a version message to a peer */
429-
void PushNodeVersion(CNode& pnode, Peer& peer);
429+
void PushNodeVersion(CNode& pnode, const Peer& peer);
430430

431431
/** Send a ping message every PING_INTERVAL or if requested via RPC. May
432432
* mark the peer to be disconnected if a ping has timed out.
@@ -1158,7 +1158,7 @@ void PeerManagerImpl::FindNextBlocksToDownload(NodeId nodeid, unsigned int count
11581158

11591159
} // namespace
11601160

1161-
void PeerManagerImpl::PushNodeVersion(CNode& pnode, Peer& peer)
1161+
void PeerManagerImpl::PushNodeVersion(CNode& pnode, const Peer& peer)
11621162
{
11631163
// Note that pnode->GetLocalServices() is a reflection of the local
11641164
// services we were offering when the CNode object was created for this
@@ -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
}

src/test/fuzz/util.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ void FillNode(FuzzedDataProvider& fuzzed_data_provider, ConnmanTestMsg& connman,
225225
const ServiceFlags remote_services = ConsumeWeakEnum(fuzzed_data_provider, ALL_SERVICE_FLAGS);
226226
const NetPermissionFlags permission_flags = ConsumeWeakEnum(fuzzed_data_provider, ALL_NET_PERMISSION_FLAGS);
227227
const int32_t version = fuzzed_data_provider.ConsumeIntegralInRange<int32_t>(MIN_PEER_PROTO_VERSION, std::numeric_limits<int32_t>::max());
228-
const bool filter_txs = fuzzed_data_provider.ConsumeBool();
228+
const bool relay_txs{fuzzed_data_provider.ConsumeBool()};
229229

230230
const CNetMsgMaker mm{0};
231231

@@ -241,7 +241,7 @@ void FillNode(FuzzedDataProvider& fuzzed_data_provider, ConnmanTestMsg& connman,
241241
uint64_t{1}, // dummy nonce
242242
std::string{}, // dummy subver
243243
int32_t{}, // dummy starting_height
244-
filter_txs),
244+
relay_txs),
245245
};
246246

247247
(void)connman.ReceiveMsgFrom(node, msg_version);
@@ -255,6 +255,9 @@ void FillNode(FuzzedDataProvider& fuzzed_data_provider, ConnmanTestMsg& connman,
255255
assert(node.nVersion == version);
256256
assert(node.GetCommonVersion() == std::min(version, PROTOCOL_VERSION));
257257
assert(node.nServices == remote_services);
258+
CNodeStateStats statestats;
259+
assert(peerman.GetNodeStateStats(node.GetId(), statestats));
260+
assert(statestats.m_relay_txs == (relay_txs && !node.IsBlockOnlyConn()));
258261
node.m_permissionFlags = permission_flags;
259262
if (successfully_connected) {
260263
CSerializedNetMsg msg_verack{mm.Make(NetMsgType::VERACK)};

0 commit comments

Comments
 (0)