refactor: Change FindTxForGetData to take GenTxid instead of CInv
Addresses https://github.com/bitcoin/bitcoin/pull/32631#discussion_r2200291621 from #32631
This commit is contained in:
1 parent
d588575ed1
commit
a9819b0e9d
1 file changed
+4
-5
@@ -947,7 +947,7 @@ private:
|
|||||||
std::atomic<std::chrono::seconds> m_last_tip_update{0s};
|
std::atomic<std::chrono::seconds> m_last_tip_update{0s};
|
||||||
|
|
||||||
/** Determine whether or not a peer can request a transaction, and return it (or nullptr if not found or not allowed). */
|
/** Determine whether or not a peer can request a transaction, and return it (or nullptr if not found or not allowed). */
|
||||||
CTransactionRef FindTxForGetData(const Peer::TxRelay& tx_relay, const CInv& inv)
|
CTransactionRef FindTxForGetData(const Peer::TxRelay& tx_relay, const GenTxid& gtxid)
|
||||||
EXCLUSIVE_LOCKS_REQUIRED(!m_most_recent_block_mutex, NetEventsInterface::g_msgproc_mutex);
|
EXCLUSIVE_LOCKS_REQUIRED(!m_most_recent_block_mutex, NetEventsInterface::g_msgproc_mutex);
|
||||||
|
|
||||||
void ProcessGetData(CNode& pfrom, Peer& peer, const std::atomic<bool>& interruptMsgProc)
|
void ProcessGetData(CNode& pfrom, Peer& peer, const std::atomic<bool>& interruptMsgProc)
|
||||||
@@ -2391,15 +2391,14 @@ void PeerManagerImpl::ProcessGetBlockData(CNode& pfrom, Peer& peer, const CInv&
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CTransactionRef PeerManagerImpl::FindTxForGetData(const Peer::TxRelay& tx_relay, const CInv& inv)
|
CTransactionRef PeerManagerImpl::FindTxForGetData(const Peer::TxRelay& tx_relay, const GenTxid& gtxid)
|
||||||
{
|
{
|
||||||
auto gtxid{ToGenTxid(inv)};
|
|
||||||
// If a tx was in the mempool prior to the last INV for this peer, permit the request.
|
|
||||||
auto txinfo{std::visit(
|
auto txinfo{std::visit(
|
||||||
[&](const auto& id) EXCLUSIVE_LOCKS_REQUIRED(NetEventsInterface::g_msgproc_mutex) {
|
[&](const auto& id) EXCLUSIVE_LOCKS_REQUIRED(NetEventsInterface::g_msgproc_mutex) {
|
||||||
return m_mempool.info_for_relay(id, tx_relay.m_last_inv_sequence);
|
return m_mempool.info_for_relay(id, tx_relay.m_last_inv_sequence);
|
||||||
},
|
},
|
||||||
gtxid)};
|
gtxid)};
|
||||||
|
|
||||||
if (txinfo.tx) {
|
if (txinfo.tx) {
|
||||||
return std::move(txinfo.tx);
|
return std::move(txinfo.tx);
|
||||||
}
|
}
|
||||||
@@ -2442,7 +2441,7 @@ void PeerManagerImpl::ProcessGetData(CNode& pfrom, Peer& peer, const std::atomic
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (auto tx{FindTxForGetData(*tx_relay, inv)}) {
|
if (auto tx{FindTxForGetData(*tx_relay, ToGenTxid(inv))}) {
|
||||||
// WTX and WITNESS_TX imply we serialize with witness
|
// WTX and WITNESS_TX imply we serialize with witness
|
||||||
const auto maybe_with_witness = (inv.IsMsgTx() ? TX_NO_WITNESS : TX_WITH_WITNESS);
|
const auto maybe_with_witness = (inv.IsMsgTx() ? TX_NO_WITNESS : TX_WITH_WITNESS);
|
||||||
MakeAndPushMessage(pfrom, NetMsgType::TX, maybe_with_witness(*tx));
|
MakeAndPushMessage(pfrom, NetMsgType::TX, maybe_with_witness(*tx));
|
||||||
|
|||||||
Reference in new issue
Block a user