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*> PluginFactory::loadPlugins() const {
QList<ServiceEntryPoint*> plugins; QList<ServiceEntryPoint*> plugins;
QStringList plugin_ids;
const QString plugin_name_wildcard = pluginNameWildCard(); const QString plugin_name_wildcard = pluginNameWildCard();
const auto plugins_paths = pluginPaths(); const auto plugins_paths = pluginPaths();
@ -48,14 +49,21 @@ QList<ServiceEntryPoint*> PluginFactory::loadPlugins() const {
qCriticalNN << LOGSEC_CORE << "The plugin" << QUOTE_W_SPACE(plugin_file.absoluteFilePath()) qCriticalNN << LOGSEC_CORE << "The plugin" << QUOTE_W_SPACE(plugin_file.absoluteFilePath())
<< "was not loaded successfully:" << QUOTE_W_SPACE_DOT(loader.errorString()); << "was not loaded successfully:" << QUOTE_W_SPACE_DOT(loader.errorString());
} }
else {
if (plugin_ids.contains(plugin_instance->code())) {
qCriticalNN << LOGSEC_CORE << "Plugin" << QUOTE_W_SPACE(plugin_instance->code())
<< "was already loaded before. Skipping now.";
}
else { else {
qDebugNN << LOGSEC_CORE << "Plugin" << QUOTE_W_SPACE(plugin_file.absoluteFilePath()) << "loaded."; qDebugNN << LOGSEC_CORE << "Plugin" << QUOTE_W_SPACE(plugin_file.absoluteFilePath()) << "loaded.";
plugin_instance->setIsDynamicallyLoaded(true); plugin_instance->setIsDynamicallyLoaded(true);
plugin_ids.append(plugin_instance->code());
plugins.append(plugin_instance); plugins.append(plugin_instance);
} }
} }
} }
}
QDir::setCurrent(backup_current_dir); QDir::setCurrent(backup_current_dir);
@ -64,6 +72,7 @@ QList<ServiceEntryPoint*> PluginFactory::loadPlugins() const {
QStringList PluginFactory::pluginPaths() const { QStringList PluginFactory::pluginPaths() const {
QStringList paths; QStringList paths;
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) #if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
paths << QCoreApplication::applicationDirPath() + QDir::separator() + QL1S("..") + QDir::separator() + paths << QCoreApplication::applicationDirPath() + QDir::separator() + QL1S("..") + QDir::separator() +
QL1S(RSSGUARD_LIBDIR) + QDir::separator() + QL1S(APP_LOW_NAME); QL1S(RSSGUARD_LIBDIR) + QDir::separator() + QL1S(APP_LOW_NAME);