From: Georg Baum Date: Sat, 5 Jul 2014 10:39:59 +0000 (+0200) Subject: Make BufferParams::auto_packages() threadsafe X-Git-Tag: 2.2.0alpha1~1791 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=e7c41b5f56e48670ed6415edac1811167a1e177b;p=features.git Make BufferParams::auto_packages() threadsafe --- 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");