Index: src/liblogger/TMultiLoggerConfig.cpp =================================================================== diff -u -N -rcca174e74e108de1f5729e4cc6c46d2b9a5e25a7 -r12b36349f6214befeace08efa9acc7e03be0d847 --- src/liblogger/TMultiLoggerConfig.cpp (.../TMultiLoggerConfig.cpp) (revision cca174e74e108de1f5729e4cc6c46d2b9a5e25a7) +++ src/liblogger/TMultiLoggerConfig.cpp (.../TMultiLoggerConfig.cpp) (revision 12b36349f6214befeace08efa9acc7e03be0d847) @@ -19,23 +19,44 @@ #include "stdafx.h" #include "TMultiLoggerConfig.h" -namespace chcore +namespace logger { TLoggerLevelConfigPtr TMultiLoggerConfig::GetLoggerConfig(PCTSTR pszChannel, bool bForceAdd) { + boost::upgrade_lock lock(m_mutex); auto iterConfig = m_mapConfigs.find(pszChannel); if (iterConfig == m_mapConfigs.end()) { if (bForceAdd) + { + boost::upgrade_to_unique_lock upgraded_lock(lock); iterConfig = m_mapConfigs.insert(std::make_pair(pszChannel, std::make_shared())).first; + } else + return GetLoggerConfig(lock, L"default", true); + } + + return iterConfig->second; + } + + TLoggerLevelConfigPtr TMultiLoggerConfig::GetLoggerConfig(boost::upgrade_lock& lock, PCTSTR pszChannel, bool bForceAdd) + { + auto iterConfig = m_mapConfigs.find(pszChannel); + if (iterConfig == m_mapConfigs.end()) + { + if (bForceAdd) + { + boost::upgrade_to_unique_lock upgraded_lock(lock); + iterConfig = m_mapConfigs.insert(std::make_pair(pszChannel, std::make_shared())).first; + } + else return GetLoggerConfig(L"default", true); } return iterConfig->second; } - void TMultiLoggerConfig::SetLogLevel(PCTSTR pszChannel, boost::log::trivial::severity_level eLevel) + void TMultiLoggerConfig::SetLogLevel(PCTSTR pszChannel, ESeverityLevel eLevel) { TLoggerLevelConfigPtr spLoggerConfig = GetLoggerConfig(pszChannel, true); spLoggerConfig->SetMinSeverityLevel(eLevel);