From e7c41b5f56e48670ed6415edac1811167a1e177b Mon Sep 17 00:00:00 2001 From: Georg Baum Date: Sat, 5 Jul 2014 12:39:59 +0200 Subject: [PATCH] Make BufferParams::auto_packages() threadsafe --- src/BufferParams.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index 49c55aaa51..792f14833f 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -52,6 +52,7 @@ #include "support/filetools.h" #include "support/gettext.h" #include "support/Messages.h" +#include "support/mutex.h" #include "support/Translator.h" #include "support/lstrings.h" @@ -446,10 +447,16 @@ void BufferParams::use_package(std::string const & p, BufferParams::Package u) map const & BufferParams::auto_packages() { - // FIXME THREAD - // It is extremely unlikely that there could be a problem here, but... static map packages; if (packages.empty()) { + // We could have a race condition here that two threads + // discover an empty map at the same time and want to fill + // it, but that is no problem, since the same contents is + // filled in twice then. Having the locker inside the + // packages.empty() condition has the advantage that we + // don't need the mutex overhead for simple reading. + static Mutex mutex; + Mutex::Locker locker(&mutex); // adding a package here implies a file format change! packages["amsmath"] = N_("The LaTeX package amsmath is only used if AMS formula types or symbols from the AMS math toolbars are inserted into formulas");