diff --git a/src/support/FileName.cpp b/src/support/FileName.cpp index 95880a0e79..05492f66d1 100644 --- a/src/support/FileName.cpp +++ b/src/support/FileName.cpp @@ -17,6 +17,7 @@ #include "support/filetools.h" #include "support/lassert.h" #include "support/lstrings.h" +#include "support/mutex.h" #include "support/qstring_helpers.h" #include "support/os.h" #include "support/Package.h" @@ -910,13 +911,15 @@ string DocFileName::outputFileName(string const & path) const string DocFileName::mangledFileName(string const & dir) const { - // FIXME THREAD // Concurrent access to these variables is possible. // We need to make sure that every DocFileName instance for a given // filename returns the same mangled name. typedef map MangledMap; static MangledMap mangledNames; + static Mutex mangledMutex; + // this locks both access to mangledNames and counter below + Mutex::Locker lock(&mangledMutex); MangledMap::const_iterator const it = mangledNames.find(absFileName()); if (it != mangledNames.end()) return (*it).second; @@ -942,7 +945,6 @@ string DocFileName::mangledFileName(string const & dir) const // Add the extension back on mname = support::changeExtension(mname, getExtension(name)); - // FIXME THREAD // Prepend a counter to the filename. This is necessary to make // the mangled name unique. static int counter = 0;