From c0901acd8ec36caaa58ba0292e32d3ff90db28d8 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Fri, 31 May 2024 07:43:10 +0200 Subject: [PATCH] make sure that plugin is not loaded multiple times, fixes #1427 --- src/librssguard/miscellaneous/pluginfactory.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/librssguard/miscellaneous/pluginfactory.cpp b/src/librssguard/miscellaneous/pluginfactory.cpp index 9080e1fc7..d5c521ddc 100644 --- a/src/librssguard/miscellaneous/pluginfactory.cpp +++ b/src/librssguard/miscellaneous/pluginfactory.cpp @@ -14,6 +14,7 @@ PluginFactory::PluginFactory() {} QList PluginFactory::loadPlugins() const { QList plugins; + QStringList plugin_ids; const QString plugin_name_wildcard = pluginNameWildCard(); const auto plugins_paths = pluginPaths(); @@ -49,10 +50,17 @@ QList PluginFactory::loadPlugins() const { << "was not loaded successfully:" << QUOTE_W_SPACE_DOT(loader.errorString()); } else { - qDebugNN << LOGSEC_CORE << "Plugin" << QUOTE_W_SPACE(plugin_file.absoluteFilePath()) << "loaded."; + if (plugin_ids.contains(plugin_instance->code())) { + qCriticalNN << LOGSEC_CORE << "Plugin" << QUOTE_W_SPACE(plugin_instance->code()) + << "was already loaded before. Skipping now."; + } + else { + qDebugNN << LOGSEC_CORE << "Plugin" << QUOTE_W_SPACE(plugin_file.absoluteFilePath()) << "loaded."; - plugin_instance->setIsDynamicallyLoaded(true); - plugins.append(plugin_instance); + plugin_instance->setIsDynamicallyLoaded(true); + plugin_ids.append(plugin_instance->code()); + plugins.append(plugin_instance); + } } } } @@ -64,6 +72,7 @@ QList PluginFactory::loadPlugins() const { QStringList PluginFactory::pluginPaths() const { QStringList paths; + #if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) paths << QCoreApplication::applicationDirPath() + QDir::separator() + QL1S("..") + QDir::separator() + QL1S(RSSGUARD_LIBDIR) + QDir::separator() + QL1S(APP_LOW_NAME);