]> granicus.if.org Git - icinga2/commitdiff
Fix race condition in ConfigWriter::EmitIdentifier
authorGunnar Beutner <gunnar@beutner.name>
Wed, 4 Nov 2015 18:05:47 +0000 (19:05 +0100)
committerGunnar Beutner <gunnar@beutner.name>
Wed, 4 Nov 2015 18:05:47 +0000 (19:05 +0100)
fixes #10538

lib/base/configwriter.cpp

index eac3ca7b9650408f7554f68321fa2f366d21c28e..f43e68da3d89e46ba25da29666382d0bbce99d90 100644 (file)
@@ -146,9 +146,14 @@ void ConfigWriter::EmitIndent(std::ostream& fp, int indentLevel)
 void ConfigWriter::EmitIdentifier(std::ostream& fp, const String& identifier, bool inAssignment)
 {
        static std::set<String> keywords;
-       if (keywords.empty()) {
-               const std::vector<String>& vkeywords = GetKeywords();
-               std::copy(vkeywords.begin(), vkeywords.end(), std::inserter(keywords, keywords.begin()));
+       static boost::mutex mutex;
+
+       {
+               boost::mutex::scoped_lock lock(mutex);
+               if (keywords.empty()) {
+                       const std::vector<String>& vkeywords = GetKeywords();
+                       std::copy(vkeywords.begin(), vkeywords.end(), std::inserter(keywords, keywords.begin()));
+               }
        }
 
        if (keywords.find(identifier) != keywords.end()) {