commit 4a2250a5d1dd551f43f75e54942ecbf0d5702080 Author: Georg Baum <b...@lyx.org> Date: Sat Jul 5 11:55:35 2014 +0200
Make Formats::isZippedFile() threadsafe In this case I use a mutex, so the zip status of files is shared between threads. This is possible because a deadlock can't happen, and it should give better performance. diff --git a/src/Format.cpp b/src/Format.cpp index 063b683..82712af 100644 --- a/src/Format.cpp +++ b/src/Format.cpp @@ -22,6 +22,7 @@ #include "support/filetools.h" #include "support/gettext.h" #include "support/lstrings.h" +#include "support/mutex.h" #include "support/os.h" #include "support/PathChanger.h" #include "support/Systemcall.h" @@ -503,14 +504,15 @@ struct ZippedInfo { }; -// FIXME THREAD /// Mapping absolute pathnames of files to their ZippedInfo metadata. static std::map<std::string, ZippedInfo> zipped_; +static Mutex zipped_mutex; bool Formats::isZippedFile(support::FileName const & filename) const { string const & fname = filename.absFileName(); time_t timestamp = filename.lastModified(); + Mutex::Locker lock(&zipped_mutex); map<string, ZippedInfo>::iterator it = zipped_.find(fname); if (it != zipped_.end() && it->second.timestamp == timestamp) return it->second.zipped;