mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-05-13 05:10:44 +02:00
net: limit BIP37 filter lifespan (active between 'filterload' and 'filterclear')
Previously, a default match-everything bloom filter was set for every peer, i.e. even before receiving a 'filterload' message and after receiving a 'filterclear' message code branches checking for the existence of the filter by testing the pointer "pfilter" were _always_ executed.
This commit is contained in:
parent
661bd5dea3
commit
5eae034996
@ -809,14 +809,13 @@ public:
|
|||||||
RecursiveMutex cs_inventory;
|
RecursiveMutex cs_inventory;
|
||||||
|
|
||||||
struct TxRelay {
|
struct TxRelay {
|
||||||
TxRelay() { pfilter = MakeUnique<CBloomFilter>(); }
|
|
||||||
mutable RecursiveMutex cs_filter;
|
mutable RecursiveMutex cs_filter;
|
||||||
// We use fRelayTxes for two purposes -
|
// We use fRelayTxes for two purposes -
|
||||||
// a) it allows us to not relay tx invs before receiving the peer's version message
|
// a) it allows us to not relay tx invs before receiving the peer's version message
|
||||||
// b) the peer may tell us in its version message that we should not relay tx invs
|
// b) the peer may tell us in its version message that we should not relay tx invs
|
||||||
// unless it loads a bloom filter.
|
// unless it loads a bloom filter.
|
||||||
bool fRelayTxes GUARDED_BY(cs_filter){false};
|
bool fRelayTxes GUARDED_BY(cs_filter){false};
|
||||||
std::unique_ptr<CBloomFilter> pfilter PT_GUARDED_BY(cs_filter) GUARDED_BY(cs_filter);
|
std::unique_ptr<CBloomFilter> pfilter PT_GUARDED_BY(cs_filter) GUARDED_BY(cs_filter){nullptr};
|
||||||
|
|
||||||
mutable RecursiveMutex cs_tx_inventory;
|
mutable RecursiveMutex cs_tx_inventory;
|
||||||
CRollingBloomFilter filterInventoryKnown GUARDED_BY(cs_tx_inventory){50000, 0.000001};
|
CRollingBloomFilter filterInventoryKnown GUARDED_BY(cs_tx_inventory){50000, 0.000001};
|
||||||
|
@ -3198,7 +3198,7 @@ bool ProcessMessage(CNode* pfrom, const std::string& msg_type, CDataStream& vRec
|
|||||||
}
|
}
|
||||||
LOCK(pfrom->m_tx_relay->cs_filter);
|
LOCK(pfrom->m_tx_relay->cs_filter);
|
||||||
if (pfrom->GetLocalServices() & NODE_BLOOM) {
|
if (pfrom->GetLocalServices() & NODE_BLOOM) {
|
||||||
pfrom->m_tx_relay->pfilter.reset(new CBloomFilter());
|
pfrom->m_tx_relay->pfilter = nullptr;
|
||||||
}
|
}
|
||||||
pfrom->m_tx_relay->fRelayTxes = true;
|
pfrom->m_tx_relay->fRelayTxes = true;
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user