This is a well known (long standing) issue. Documented in the code base in commit eea02be70ee37b845f2719b3c08e5baf4b6f51f6.

Countless intermittent sanitizer warnings can be attributed to it.
bool Start(CScheduler& scheduler, const Options& options);
    
    
    
    
    
    
    
    
    
    void Stop() NO_THREAD_SAFETY_ANALYSIS;
    void Interrupt();
    bool GetNetworkActive() const { return fNetworkActive; };
    bool GetUseAddrmanOutgoing() const { return m_use_addrman_outgoing; };
    void SetNetworkActive(bool active);
    void OpenNetworkConnection(const CAddress& addrConnect, bool fCountFailure, CSemaphoreGrant *grantOutbound = nullptr, const char *strDest = nullptr, bool fOneShot = false, bool fFeeler = false, bool manual_connection = false, bool block_relay_only = false);
    bool CheckIncomingNonce(uint64_t nonce);
    bool ForNode(NodeId id, std::function<bool(CNode* pnode)> func);
    void PushMessage(CNode* pnode, CSerializedNetMsg&& msg);
    template<typename Callable>
    void ForEachNode(Callable&& func)
    {
        LOCK(cs_vNodes);
        for (auto&& node : vNodes) {
            if (NodeFullyConnected(node))
                func(node);
        }
    };
    template<typename Callable>
    void ForEachNode(Callable&& func) const