@@ -1895,34 +1895,41 @@ void CCoinJoinClientManager::GetJsonInfo(UniValue& obj) const
18951895}
18961896
18971897void CoinJoinWalletManager::Add (CWallet& wallet) {
1898- m_wallet_manager_map.try_emplace (
1899- wallet.GetName (),
1900- std::make_unique<CCoinJoinClientManager>(wallet, *this , m_dmnman, m_mn_metaman, m_mn_sync, m_queueman, m_is_masternode)
1901- );
1898+ {
1899+ LOCK (cs_wallet_manager_map);
1900+ m_wallet_manager_map.try_emplace (
1901+ wallet.GetName (),
1902+ std::make_unique<CCoinJoinClientManager>(wallet, *this , m_dmnman, m_mn_metaman, m_mn_sync,
1903+ m_queueman, m_is_masternode)
1904+ );
1905+ }
19021906 g_wallet_init_interface.InitCoinJoinSettings (*this );
19031907}
19041908
19051909void CoinJoinWalletManager::DoMaintenance () {
1906- for (auto & [wallet_str, walletman] : m_wallet_manager_map ) {
1910+ for (auto & [wallet_str, walletman] : raw () ) {
19071911 walletman->DoMaintenance (m_chainstate, m_connman, m_mempool);
19081912 }
19091913}
19101914
19111915void CoinJoinWalletManager::Remove (const std::string& name) {
1912- m_wallet_manager_map.erase (name);
1916+ {
1917+ LOCK (cs_wallet_manager_map);
1918+ m_wallet_manager_map.erase (name);
1919+ }
19131920 g_wallet_init_interface.InitCoinJoinSettings (*this );
19141921}
19151922
19161923void CoinJoinWalletManager::Flush (const std::string& name)
19171924{
1918- auto clientman = Get (name);
1919- assert (clientman != nullptr );
1925+ auto clientman = Assert (Get (name));
19201926 clientman->ResetPool ();
19211927 clientman->StopMixing ();
19221928}
19231929
19241930CCoinJoinClientManager* CoinJoinWalletManager::Get (const std::string& name) const
19251931{
1932+ LOCK (cs_wallet_manager_map);
19261933 auto it = m_wallet_manager_map.find (name);
19271934 return (it != m_wallet_manager_map.end ()) ? it->second .get () : nullptr ;
19281935}
0 commit comments