make sure that plugin is not loaded multiple times, fixes #1427

This commit is contained in:
Martin Rotter 2024-05-31 07:43:10 +02:00
parent 02f64e247b
commit c0901acd8e

View File

@ -14,6 +14,7 @@ PluginFactory::PluginFactory() {}
QList<ServiceEntryPoint*> PluginFactory::loadPlugins() const {
QList<ServiceEntryPoint*> plugins;
QStringList plugin_ids;
const QString plugin_name_wildcard = pluginNameWildCard();
const auto plugins_paths = pluginPaths();
@ -49,10 +50,17 @@ QList<ServiceEntryPoint*> 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<ServiceEntryPoint*> 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);