diff options
author | fanquake <fanquake@gmail.com> | 2023-04-11 11:27:48 +0100 |
---|---|---|
committer | fanquake <fanquake@gmail.com> | 2023-04-11 11:43:21 +0100 |
commit | 53eb4b7a212db7563291509ff4e53327440a9df2 (patch) | |
tree | b4d9777d2d9df43b2083d9e44d2f6ac812c1f5df /src | |
parent | b24553c04cc4f6da5491f4648b67ae5a1b2769f9 (diff) | |
parent | 55c4795c5794c5c2f8a69b394b847413c9cfbe36 (diff) |
Merge bitcoin/bitcoin#27270: refactor, net processing: Avoid CNode::m_relays_txs usage
55c4795c5794c5c2f8a69b394b847413c9cfbe36 [net processing] Use TxRelay::m_relay_txs over CNode::m_relays_txs (dergoegge)
Pull request description:
`CNode::m_relays_txs` is meant to only be used for the eviction logic in `net`. `TxRelay::m_relay_txs` will hold the same value and is meant to be used on the application layer to determine if we will/should relay transactions to a peer.
(Shameless plug: we should really better specify the interface for updating eviction data to avoid refactors like this in the future -> #25572)
ACKs for top commit:
MarcoFalke:
lgtm ACK 55c4795c5794c5c2f8a69b394b847413c9cfbe36
Tree-SHA512: 59cfd23e32568fd96cda5570790e518242a6c76d4edf5b7d1a2a7f9724d590d2a38395504e05be0af4e98dd5c0056fc0be6568eab2818934692483a186e5181d
Diffstat (limited to 'src')
-rw-r--r-- | src/net_processing.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/net_processing.cpp b/src/net_processing.cpp index 276295b7d0..68bd91297c 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -3296,11 +3296,13 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, if (greatest_common_version >= WTXID_RELAY_VERSION && m_txreconciliation) { // Per BIP-330, we announce txreconciliation support if: // - protocol version per the peer's VERSION message supports WTXID_RELAY; - // - transaction relay is supported per the peer's VERSION message (see m_relays_txs); - // - this is not a block-relay-only connection and not a feeler (see m_relays_txs); + // - transaction relay is supported per the peer's VERSION message + // - this is not a block-relay-only connection and not a feeler // - this is not an addr fetch connection; // - we are not in -blocksonly mode. - if (pfrom.m_relays_txs && !pfrom.IsAddrFetchConn() && !m_ignore_incoming_txs) { + const auto* tx_relay = peer->GetTxRelay(); + if (tx_relay && WITH_LOCK(tx_relay->m_bloom_filter_mutex, return tx_relay->m_relay_txs) && + !pfrom.IsAddrFetchConn() && !m_ignore_incoming_txs) { const uint64_t recon_salt = m_txreconciliation->PreRegisterPeer(pfrom.GetId()); m_connman.PushMessage(&pfrom, msg_maker.Make(NetMsgType::SENDTXRCNCL, TXRECONCILIATION_VERSION, recon_salt)); @@ -3528,7 +3530,8 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type, // Peer must not offer us reconciliations if they specified no tx relay support in VERSION. // This flag might also be false in other cases, but the RejectIncomingTxs check above // eliminates them, so that this flag fully represents what we are looking for. - if (!pfrom.m_relays_txs) { + const auto* tx_relay = peer->GetTxRelay(); + if (!tx_relay || !WITH_LOCK(tx_relay->m_bloom_filter_mutex, return tx_relay->m_relay_txs)) { LogPrintLevel(BCLog::NET, BCLog::Level::Debug, "sendtxrcncl received from peer=%d which indicated no tx relay to us; disconnecting\n", pfrom.GetId()); pfrom.fDisconnect = true; return; |