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.
class CCoinsViewDBCursor;
class uint256;
static constexpr int MAX_BLOCK_COINSDB_USAGE = 10;
static const int64_t nDefaultDbCache = 450;
static const int64_t nDefaultDbBatchSize = 16 << 20;
static const int64_t nMaxDbCache = sizeof(void*) > 4 ? 16384 : 1024;
static const int64_t nMinDbCache = 4;
static const int64_t nMaxBlockDBCache = 2;
static const int64_t nMaxBlockDBAndTxIndexCache = 1024;
static const int64_t nMaxCoinsDBCache = 8;
struct CDiskTxPos : public CDiskBlockPos
{
    unsigned int nTxOffset; 
    ADD_SERIALIZE_METHODS;
    template <typename Stream, typename Operation>
    inline void SerializationOp(Stream& s, Operation ser_action) {
        READWRITE(*(CDiskBlockPos*)this);
        READWRITE(VARINT(nTxOffset));
    }
    CDiskTxPos(const CDiskBlockPos &blockIn, unsigned int nTxOffsetIn) : CDiskBlockPos(blockIn.nFile, blockIn.nPos), nTxOffset(nTxOffsetIn) {
    }
    CDiskTxPos() {
        SetNull();
    }
    void SetNull() {
        CDiskBlockPos::SetNull();
        nTxOffset = 0;
    }
};
class CCoinsViewDB final : public CCoinsView