Ensure proper locking in QFileInfoGatherer
authorBradley T. Hughes <bradley.hughes@nokia.com>
Wed, 11 Jan 2012 11:47:07 +0000 (12:47 +0100)
committerQt by Nokia <qt-info@nokia.com>
Wed, 11 Jan 2012 23:45:19 +0000 (00:45 +0100)
The mutex is used to protect the QFileSystemWatcher instance created by
QFileInfoGatherer, except when calling getFileInfos(). Add a locker
before using QFileSystemWatcher in this function.

Note: it appears that QFileInfoGatherer is misusing QFileSystemWatcher
by calling it from multiple threads. QFileSystemWatcher is an event
driven class, and as such, not thread-safe. So far, no problems have
been reported related to this, so I've left the code as-is.

Change-Id: Ib1429d9399e37120acf8e8d3b989b83c4ce24203
Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
src/widgets/dialogs/qfileinfogatherer.cpp

index 1e08dbd..bce8b3e 100644 (file)
@@ -280,10 +280,11 @@ void QFileInfoGatherer::getFileInfos(const QString &path, const QStringList &fil
 {
 #ifndef QT_NO_FILESYSTEMWATCHER
     if (files.isEmpty()
-        && !watcher->directories().contains(path)
         && !path.isEmpty()
         && !path.startsWith(QLatin1String("//")) /*don't watch UNC path*/) {
-        watcher->addPath(path);
+        QMutexLocker locker(&mutex);
+        if (!watcher->directories().contains(path))
+            watcher->addPath(path);
     }
 #endif