diff --git a/lib/config/configcompiler.cpp b/lib/config/configcompiler.cpp index a9f99d485..1021b54d0 100644 --- a/lib/config/configcompiler.cpp +++ b/lib/config/configcompiler.cpp @@ -30,6 +30,7 @@ using namespace icinga; std::vector ConfigCompiler::m_IncludeSearchDirs; +boost::mutex ConfigCompiler::m_ZoneDirsMutex; std::map > ConfigCompiler::m_ZoneDirs; /** @@ -305,8 +306,8 @@ void ConfigCompiler::AddIncludeSearchDir(const String& dir) std::vector ConfigCompiler::GetZoneDirs(const String& zone) { - std::map >::const_iterator it; - it = m_ZoneDirs.find(zone); + boost::mutex::scoped_lock lock(m_ZoneDirsMutex); + std::map >::const_iterator it = m_ZoneDirs.find(zone); if (it == m_ZoneDirs.end()) return std::vector(); else @@ -318,6 +319,8 @@ void ConfigCompiler::RegisterZoneDir(const String& tag, const String& ppath, con ZoneFragment zf; zf.Tag = tag; zf.Path = ppath; + + boost::mutex::scoped_lock lock(m_ZoneDirsMutex); m_ZoneDirs[zoneName].push_back(zf); } diff --git a/lib/config/configcompiler.hpp b/lib/config/configcompiler.hpp index 3a9a08257..41d981585 100644 --- a/lib/config/configcompiler.hpp +++ b/lib/config/configcompiler.hpp @@ -130,6 +130,7 @@ private: void *m_Scanner; static std::vector m_IncludeSearchDirs; + static boost::mutex m_ZoneDirsMutex; static std::map > m_ZoneDirs; void InitializeScanner(void);