mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-10 20:04:46 +00:00
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.
This commit is contained in:
parent
0de4bc224a
commit
4bfca60359
@ -97,6 +97,7 @@
|
|||||||
#include "support/gzstream.h"
|
#include "support/gzstream.h"
|
||||||
#include "support/lstrings.h"
|
#include "support/lstrings.h"
|
||||||
#include "support/lyxalgo.h"
|
#include "support/lyxalgo.h"
|
||||||
|
#include "support/mutex.h"
|
||||||
#include "support/os.h"
|
#include "support/os.h"
|
||||||
#include "support/Package.h"
|
#include "support/Package.h"
|
||||||
#include "support/PathChanger.h"
|
#include "support/PathChanger.h"
|
||||||
@ -353,13 +354,20 @@ private:
|
|||||||
/// Creates the per buffer temporary directory
|
/// Creates the per buffer temporary directory
|
||||||
static FileName createBufferTmpDir()
|
static FileName createBufferTmpDir()
|
||||||
{
|
{
|
||||||
// FIXME THREAD
|
// FIXME This would be the ideal application for a TempDir class (like
|
||||||
|
// TempFile but for directories)
|
||||||
|
string counter;
|
||||||
|
{
|
||||||
static int count;
|
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?
|
// We are in our own directory. Why bother to mangle name?
|
||||||
// In fact I wrote this code to circumvent a problematic behaviour
|
// In fact I wrote this code to circumvent a problematic behaviour
|
||||||
// (bug?) of EMX mkstemp().
|
// (bug?) of EMX mkstemp().
|
||||||
FileName tmpfl(package().temp_dir().absFileName() + "/lyx_tmpbuf" +
|
FileName tmpfl(package().temp_dir().absFileName() + "/lyx_tmpbuf" +
|
||||||
convert<string>(count++));
|
counter);
|
||||||
|
|
||||||
if (!tmpfl.createDirectory(0777)) {
|
if (!tmpfl.createDirectory(0777)) {
|
||||||
throw ExceptionMessage(WarningException, _("Disk Error: "), bformat(
|
throw ExceptionMessage(WarningException, _("Disk Error: "), bformat(
|
||||||
|
Loading…
Reference in New Issue
Block a user