diff options
author | Bradley T. Hughes <bradley.hughes@nokia.com> | 2012-01-11 12:47:07 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-01-12 00:45:19 +0100 |
commit | b409a81da5d0d14b3ac96497f60c1b599bac60a7 (patch) | |
tree | dfe6e43c375b3f2163a40b879cc2462b224625ea /src/widgets | |
parent | 93a466c6fc3c455dcc9bf1292cc6a2725287a94a (diff) | |
download | qtbase-b409a81da5d0d14b3ac96497f60c1b599bac60a7.tar.gz |
Ensure proper locking in QFileInfoGatherer
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>
Diffstat (limited to 'src/widgets')
-rw-r--r-- | src/widgets/dialogs/qfileinfogatherer.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/widgets/dialogs/qfileinfogatherer.cpp b/src/widgets/dialogs/qfileinfogatherer.cpp index 1e08dbd1a5..bce8b3ecc1 100644 --- a/src/widgets/dialogs/qfileinfogatherer.cpp +++ b/src/widgets/dialogs/qfileinfogatherer.cpp @@ -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 |