diff --git a/src/net.h b/src/net.h --- a/src/net.h +++ b/src/net.h @@ -690,11 +690,10 @@ // b) the peer may tell us in its version message that we should not relay // tx invs unless it loads a bloom filter. - // protected by cs_filter - bool fRelayTxes; + bool fRelayTxes GUARDED_BY(cs_filter); bool fSentAddr; CSemaphoreGrant grantOutbound; - CCriticalSection cs_filter; + mutable CCriticalSection cs_filter; std::unique_ptr pfilter PT_GUARDED_BY(cs_filter); std::atomic nRefCount; @@ -731,11 +730,10 @@ std::set setAskFor; std::multimap mapAskFor; int64_t nNextInvSend; - // Used for headers announcements - unfiltered blocks to relay. Also - // protected by cs_inventory. - std::vector vBlockHashesToAnnounce; - // Used for BIP35 mempool sending, also protected by cs_inventory. - bool fSendMempool; + // Used for headers announcements - unfiltered blocks to relay. + std::vector vBlockHashesToAnnounce GUARDED_BY(cs_inventory); + // Used for BIP35 mempool sending. + bool fSendMempool GUARDED_BY(cs_inventory); // Last time a "MEMPOOL" request was serviced. std::atomic timeLastMempoolReq; diff --git a/src/net.cpp b/src/net.cpp --- a/src/net.cpp +++ b/src/net.cpp @@ -1063,6 +1063,7 @@ if (node->fWhitelisted || !node->fInbound || node->fDisconnect) { continue; } + LOCK(node->cs_filter); NodeEvictionCandidate candidate = { node->GetId(), node->nTimeConnected,