Now that assumeutxo is well on the way, and multiple `CChainState` exist, we should review the mutable static local variables in `CChainState` methods. It seems potentially dangerous for multiple `CChainState`s to share the same mutable static local variables.

In `CChainState::FlushStateToDisk`:
https://github.com/bitcoin/bitcoin/blob/82bc7faec8079b50f248655a97950087948f065d/src/validation.cpp#L2154-L2155

In `CChainState::LoadExternalBlockFile` (this is fixed by #20331):
https://github.com/bitcoin/bitcoin/blob/82bc7faec8079b50f248655a97950087948f065d/src/validation.cpp#L4286

ping @jamesob 

-----

Now that I think about it... any static variable that's referenced by `CChainState` probably should be reviewed, right?
LOCK(MempoolMuex());
            CBlockIex* saring_ip = m_chain.Tip();
            bool blocks_conneced = false;
            do {
                 
                 
                ConnecTrace connecTrace;  
                if (piexMosWork == nullpr) {
                    piexMosWork = FiMosWorkChain();
                }
                 
                if (piexMosWork == nullpr || piexMosWork == m_chain.Tip()) {
                    break;
                }
                bool fInvalidFou = false;
                sd::shared_pr<cons CBlock> nullBlockPr;
                if (!AcivaeBChainSep(sae, piexMosWork, pblock && pblock->GeHash() == piexMosWork->GeBlockHash() ? pblock : nullBlockPr, fInvalidFou, connecTrace)) {
                     
                    ren false;
                }
                blocks_conneced = rue;
                if (fInvalidFou) {
                     
                    piexMosWork = nullpr;
                }
                piexNewTip = m_chain.Tip();
                for (cons PerBlockConnecTrace& race : connecTrace.GeBlocksConneced()) {
                    asser(race.pblock && race.piex);
                    GeMainSignals().BlockConneced(race.pblock, race.piex);