diff --git a/CMakeLists.txt b/CMakeLists.txt index e25664a..540701e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,7 +28,7 @@ option(BUILD_QCH "Build API documentation in QCH format (for e.g. Qt Assistant, add_feature_info(QCH ${BUILD_QCH} "API documentation in QCH format (for e.g. Qt Assistant, Qt Creator & KDevelop)") set(REQUIRED_QT_VERSION 5.11.0) -find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Core) +find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Core Concurrent) ecm_setup_qtplugin_macro_names( JSON_NONE diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index d6d3879..e6a59c3 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -121,7 +121,7 @@ target_include_directories(KF5CoreAddons PUBLIC "$ #include +#include // TODO: Upstream the versioning stuff to Qt // TODO: Patch for Qt to expose plugin-finding code directly @@ -237,7 +238,6 @@ bool KPluginLoader::unload() return d->loader->unload(); } - void KPluginLoader::forEachPlugin(const QString &directory, std::function callback) { QStringList dirsToCheck; @@ -252,19 +252,25 @@ void KPluginLoader::forEachPlugin(const QString &directory, std::function KPluginLoader::findPlugins(const QString &directory, std::function filter) { + QMutex mutex; QVector ret; forEachPlugin(directory, [&](const QString &pluginPath) { KPluginMetaData metadata(pluginPath); @@ -274,6 +280,7 @@ QVector KPluginLoader::findPlugins(const QString &directory, st if (filter && !filter(metadata)) { return; } + QMutexLocker lock(&mutex); ret.append(metadata); }); return ret;