commit ac8fd45b447938f06b126b94a4f95d1cbf3adcd4
Author: Georg Baum <[email protected]>
Date:   Mon Jul 7 21:37:11 2014 +0200

    Make BufferParams::auto_packages() threadsafe

diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp
index 3b85ff7..890f584 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"
 
@@ -447,6 +448,14 @@ map<string, string> const & BufferParams::auto_packages()
 {
        static map<string, string> 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");

Reply via email to