From a3fd33f8a1725a035f5e7b7c73a1f4e199fcf690 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Wed, 4 Nov 2015 19:05:47 +0100 Subject: [PATCH] Fix race condition in ConfigWriter::EmitIdentifier fixes #10538 --- lib/base/configwriter.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) 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()) {