aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/utils/fsengine/fsengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/utils/fsengine/fsengine.cpp')
-rw-r--r--src/libs/utils/fsengine/fsengine.cpp51
1 files changed, 36 insertions, 15 deletions
diff --git a/src/libs/utils/fsengine/fsengine.cpp b/src/libs/utils/fsengine/fsengine.cpp
index cc622b8786..fd343aaad1 100644
--- a/src/libs/utils/fsengine/fsengine.cpp
+++ b/src/libs/utils/fsengine/fsengine.cpp
@@ -10,6 +10,8 @@ class Utils::Internal::FSEngineHandler
{};
#endif
+#include <QMutex>
+
#include <memory>
namespace Utils {
@@ -29,46 +31,65 @@ bool FSEngine::isAvailable()
#endif
}
-FilePaths FSEngine::registeredDeviceRoots()
+template<class T>
+class Locked
+{
+public:
+ Locked(QMutex *mutex, T &object)
+ : m_object(object)
+ , m_locker(mutex)
+ {}
+
+ T *operator->() const noexcept { return &m_object; }
+ const T operator*() const noexcept { return m_object; }
+
+private:
+ T &m_object;
+ QMutexLocker<QMutex> m_locker;
+};
+
+static Locked<Utils::FilePaths> deviceRoots()
{
- return FSEngine::deviceRoots();
+ static FilePaths g_deviceRoots;
+ static QMutex mutex;
+ return {&mutex, g_deviceRoots};
}
-void FSEngine::addDevice(const FilePath &deviceRoot)
+static Locked<QStringList> deviceSchemes()
{
- deviceRoots().append(deviceRoot);
+ static QStringList g_deviceSchemes{"device"};
+ static QMutex mutex;
+ return {&mutex, g_deviceSchemes};
}
-void FSEngine::removeDevice(const FilePath &deviceRoot)
+FilePaths FSEngine::registeredDeviceRoots()
{
- deviceRoots().removeAll(deviceRoot);
+ return *deviceRoots();
}
-FilePaths &FSEngine::deviceRoots()
+void FSEngine::addDevice(const FilePath &deviceRoot)
{
- static FilePaths g_deviceRoots;
- return g_deviceRoots;
+ deviceRoots()->append(deviceRoot);
}
-QStringList &FSEngine::deviceSchemes()
+void FSEngine::removeDevice(const FilePath &deviceRoot)
{
- static QStringList g_deviceSchemes{"device"};
- return g_deviceSchemes;
+ deviceRoots()->removeAll(deviceRoot);
}
void FSEngine::registerDeviceScheme(const QStringView scheme)
{
- deviceSchemes().append(scheme.toString());
+ deviceSchemes()->append(scheme.toString());
}
void FSEngine::unregisterDeviceScheme(const QStringView scheme)
{
- deviceSchemes().removeAll(scheme.toString());
+ deviceSchemes()->removeAll(scheme.toString());
}
QStringList FSEngine::registeredDeviceSchemes()
{
- return FSEngine::deviceSchemes();
+ return *deviceSchemes();
}
} // namespace Utils