@ -3120,8 +3120,27 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
}
if ( strCommand = = NetMsgType : : NOTFOUND ) {
// We do not care about the NOTFOUND message, but logging an Unknown Command
// message would be undesirable as we transmit it ourselves.
// Remove the NOTFOUND transactions from the peer
LOCK ( cs_main ) ;
CNodeState * state = State ( pfrom - > GetId ( ) ) ;
std : : vector < CInv > vInv ;
vRecv > > vInv ;
if ( vInv . size ( ) < = MAX_PEER_TX_IN_FLIGHT + MAX_BLOCKS_IN_TRANSIT_PER_PEER ) {
for ( CInv & inv : vInv ) {
if ( inv . type = = MSG_TX | | inv . type = = MSG_WITNESS_TX ) {
// If we receive a NOTFOUND message for a txid we requested, erase
// it from our data structures for this peer.
auto in_flight_it = state - > m_tx_download . m_tx_in_flight . find ( inv . hash ) ;
if ( in_flight_it = = state - > m_tx_download . m_tx_in_flight . end ( ) ) {
// Skip any further work if this is a spurious NOTFOUND
// message.
continue ;
}
state - > m_tx_download . m_tx_in_flight . erase ( in_flight_it ) ;
state - > m_tx_download . m_tx_announced . erase ( inv . hash ) ;
}
}
}
return true ;
}