Make BufferParams::auto_packages() threadsafe

This commit is contained in:
Georg Baum 2014-07-05 12:39:59 +02:00
parent 4bfca60359
commit e7c41b5f56

View File

@ -52,6 +52,7 @@
#include "support/filetools.h" #include "support/filetools.h"
#include "support/gettext.h" #include "support/gettext.h"
#include "support/Messages.h" #include "support/Messages.h"
#include "support/mutex.h"
#include "support/Translator.h" #include "support/Translator.h"
#include "support/lstrings.h" #include "support/lstrings.h"
@ -446,10 +447,16 @@ void BufferParams::use_package(std::string const & p, BufferParams::Package u)
map<string, string> const & BufferParams::auto_packages() map<string, string> const & BufferParams::auto_packages()
{ {
// FIXME THREAD
// It is extremely unlikely that there could be a problem here, but...
static map<string, string> packages; static map<string, string> packages;
if (packages.empty()) { 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! // adding a package here implies a file format change!
packages["amsmath"] = 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"); N_("The LaTeX package amsmath is only used if AMS formula types or symbols from the AMS math toolbars are inserted into formulas");