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.

{
    PeerRef peer = GetPeerRef(pto->GetId());
    if (!peer) return false;
    const Consensus::Params& consensusParams = m_chainparams.GetConsensus();
    
    
    if (MaybeDiscourageAndDisconnect(*pto, *peer)) return true;
    
    if (!pto->fSuccessfullyConnected || pto->fDisconnect)
        return true;
    
    const CNetMsgMaker msgMaker(pto->GetCommonVersion());
    const auto current_time = GetTime<std::chrono::microseconds>();
    MaybeSendPing(*pto, *peer, current_time);
    
    if (pto->fDisconnect) return true;
    MaybeSendAddr(*pto, *peer, current_time);
    {
        LOCK(cs_main);
        CNodeState &state = *State(pto->GetId());
        
        if (pindexBestHeader == nullptr)
            pindexBestHeader = m_chainman.ActiveChain().Tip();
        bool fFetch = state.fPreferredDownload || (nPreferredDownload == 0 && !pto->fClient && !pto->IsAddrFetchConn()); 
        if (!state.fSyncStarted && !pto->fClient && !fImporting && !fReindex) {