]> git.lyx.org Git - features.git/commitdiff
Make createBufferTmpDir() threadsafe
authorGeorg Baum <baum@lyx.org>
Mon, 7 Jul 2014 20:03:32 +0000 (22:03 +0200)
committerGeorg Baum <baum@lyx.org>
Mon, 7 Jul 2014 20:03:32 +0000 (22:03 +0200)
This must not use thread local storage, since the generated directories are
all in the same parent directory which is unique per running LyX instance.

src/Buffer.cpp

index dcd74bcbb5c41009ab89b6683b7c744b36f5f8d2..d629debf08ba527996efe879fcb4a2fa6fbc71e1 100644 (file)
@@ -98,6 +98,7 @@
 #include "support/gzstream.h"
 #include "support/lstrings.h"
 #include "support/lyxalgo.h"
+#include "support/mutex.h"
 #include "support/os.h"
 #include "support/Package.h"
 #include "support/PathChanger.h"
@@ -354,12 +355,20 @@ private:
 /// Creates the per buffer temporary directory
 static FileName createBufferTmpDir()
 {
-       static int count;
+       // FIXME This would be the ideal application for a TempDir class (like
+       //       TempFile but for directories) 
+       string counter;
+       {
+               static int count;
+               static Mutex mutex;
+               Mutex::Locker locker(&mutex);
+               counter = convert<string>(count++);
+       }
        // We are in our own directory.  Why bother to mangle name?
        // In fact I wrote this code to circumvent a problematic behaviour
        // (bug?) of EMX mkstemp().
        FileName tmpfl(package().temp_dir().absFileName() + "/lyx_tmpbuf" +
-               convert<string>(count++));
+               counter);
 
        if (!tmpfl.createDirectory(0777)) {
                throw ExceptionMessage(WarningException, _("Disk Error: "), bformat(