There are some potential feefilter cleanups mentioned and motivated in comment https://github.com/bitcoin/bitcoin/pull/21509#issuecomment-805808485 . If you address the locking one, please be careful and make sure that `round()` is only called under a lock. See https://github.com/bitcoin/bitcoin/pull/21509#issuecomment-807992199

#### Useful skills:

* Bitcoin protocol messages
* Bitcoin Core P2P design
* Running our unit and functional tests

#### Want to work on this issue?

For guidance on contributing, please read [CONTRIBUTING.md](https://github.com/bitcoin/bitcoin/blob/master/CONTRIBUTING.md) before opening your pull request.

std::vector<CAddress> m_addrs_to_send;
    /** Probabilistic filter of addresses that this peer already knows.
     *  Used to avoid relaying addresses to this peer more than once. */
    const std::unique_ptr<CRollingBloomFilter> m_addr_known;
    
    bool m_getaddr_sent{false};
    
    mutable Mutex m_addr_send_times_mutex;
    
    std::chrono::microseconds m_next_addr_send GUARDED_BY(m_addr_send_times_mutex){0};
    
    std::chrono::microseconds m_next_local_addr_send GUARDED_BY(m_addr_send_times_mutex){0};
    /** Whether the peer has signaled support for receiving ADDRv2 (BIP155)
     *  messages, indicating a preference to receive ADDRv2 instead of ADDR ones. */
    std::atomic_bool m_wants_addrv2{false};
    
    bool m_getaddr_recvd{false};
    
    std::set<uint256> m_orphan_work_set GUARDED_BY(g_cs_orphans);
    
    Mutex m_getdata_requests_mutex;
    
    std::deque<CInv> m_getdata_requests GUARDED_BY(m_getdata_requests_mutex);
    explicit Peer(NodeId id, bool addr_relay)
        : m_id(id)
        , m_addr_known{addr_relay ? std::make_unique<CRollingBloomFilter>(5000, 0.001) : nullptr}
    {}
};
using PeerRef = std::shared_ptr<Peer>;
class PeerManagerImpl final : public PeerManager