From: Gunnar Beutner Date: Wed, 4 Nov 2015 18:05:47 +0000 (+0100) Subject: Fix race condition in ConfigWriter::EmitIdentifier X-Git-Tag: v2.4.0~92 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a3fd33f8a1725a035f5e7b7c73a1f4e199fcf690;p=icinga2 Fix race condition in ConfigWriter::EmitIdentifier fixes #10538 --- diff --git a/lib/base/configwriter.cpp b/lib/base/configwriter.cpp index eac3ca7b9..f43e68da3 100644 --- a/lib/base/configwriter.cpp +++ b/lib/base/configwriter.cpp @@ -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 keywords; - if (keywords.empty()) { - const std::vector& 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& vkeywords = GetKeywords(); + std::copy(vkeywords.begin(), vkeywords.end(), std::inserter(keywords, keywords.begin())); + } } if (keywords.find(identifier) != keywords.end()) {