init.cpp:1635 prints mapBlockIndex.size() without cs_main. This is technically a race (though it is rather inconsequential). At some point someone should fix this so tsan stops complaining.
if (!AcceptBlockHeader(block, state, chainparams, &pindex))
        return false;
    
    
    
    bool fAlreadyHave = pindex->nStatus & BLOCK_HAVE_DATA;
    bool fHasMoreWork = (chainActive.Tip() ? pindex->nChainWork > chainActive.Tip()->nChainWork : true);
    
    
    
    
    
    bool fTooFarAhead = (pindex->nHeight > int(chainActive.Height() + MIN_BLOCKS_TO_KEEP));
    
    
    
    
    
    
    if (fAlreadyHave) return true;
    if (!fRequested) {  
        if (pindex->nTx != 0) return true;  
        if (!fHasMoreWork) return true;     
        if (fTooFarAhead) return true;      
    }
    if (fNewBlock) *fNewBlock = true;
    if (!CheckBlock(block, state, chainparams.GetConsensus()) ||
        !ContextualCheckBlock(block, state, chainparams.GetConsensus(), pindex->pprev)) {
        if (state.IsInvalid() && !state.CorruptionPossible()) {
            pindex->nStatus |= BLOCK_FAILED_VALID;