]> granicus.if.org Git - icinga2/commitdiff
Fix crash in ConfigCompiler::RegisterZoneDir
authorGunnar Beutner <gunnar@beutner.name>
Mon, 24 Aug 2015 12:14:44 +0000 (14:14 +0200)
committerGunnar Beutner <gunnar@beutner.name>
Mon, 24 Aug 2015 12:14:44 +0000 (14:14 +0200)
fixes #9987

lib/config/configcompiler.cpp
lib/config/configcompiler.hpp

index a9f99d4852c6c772f676a7f50109350324a08329..1021b54d0f2fddd2fc7e65f6406ea175e57c867a 100644 (file)
@@ -30,6 +30,7 @@
 using namespace icinga;
 
 std::vector<String> ConfigCompiler::m_IncludeSearchDirs;
+boost::mutex ConfigCompiler::m_ZoneDirsMutex;
 std::map<String, std::vector<ZoneFragment> > ConfigCompiler::m_ZoneDirs;
 
 /**
@@ -305,8 +306,8 @@ void ConfigCompiler::AddIncludeSearchDir(const String& dir)
 
 std::vector<ZoneFragment> ConfigCompiler::GetZoneDirs(const String& zone)
 {
-       std::map<String, std::vector<ZoneFragment> >::const_iterator it;
-       it = m_ZoneDirs.find(zone);
+       boost::mutex::scoped_lock lock(m_ZoneDirsMutex);
+       std::map<String, std::vector<ZoneFragment> >::const_iterator it = m_ZoneDirs.find(zone);
        if (it == m_ZoneDirs.end())
                return std::vector<ZoneFragment>();
        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);
 }
 
index 3a9a08257babec14eb2c82f98e760b9433c49ade..41d9815859958a576976facd6f7feb52bf0119ce 100644 (file)
@@ -130,6 +130,7 @@ private:
        void *m_Scanner;
 
        static std::vector<String> m_IncludeSearchDirs;
+       static boost::mutex m_ZoneDirsMutex;
        static std::map<String, std::vector<ZoneFragment> > m_ZoneDirs;
 
        void InitializeScanner(void);