From 4bfca60359825cf51b09f0a6b35a91e2858df374 Mon Sep 17 00:00:00 2001 From: Georg Baum Date: Sat, 5 Jul 2014 12:31:12 +0200 Subject: [PATCH] Make createBufferTmpDir() threadsafe 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 | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 4331309857..0a362c3ef4 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -97,6 +97,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" @@ -353,13 +354,20 @@ private: /// Creates the per buffer temporary directory static FileName createBufferTmpDir() { - // FIXME THREAD - 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(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(count++)); + counter); if (!tmpfl.createDirectory(0777)) { throw ExceptionMessage(WarningException, _("Disk Error: "), bformat(