summaryrefslogtreecommitdiff
path: root/src/plugins/PluginSystem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/PluginSystem.cpp')
-rw-r--r--src/plugins/PluginSystem.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/plugins/PluginSystem.cpp b/src/plugins/PluginSystem.cpp
index 44b4de1f..ae87aedb 100644
--- a/src/plugins/PluginSystem.cpp
+++ b/src/plugins/PluginSystem.cpp
@@ -119,11 +119,16 @@ void CPluginSystem::unloadPlugin(const CPlugin* plugin, bool eject) {
g_pConfigManager->removePluginConfig(plugin->m_pHandle);
- dlclose(plugin->m_pHandle);
+ // save these two for dlclose and a log,
+ // as erase_if will kill the pointer
+ const auto PLNAME = plugin->name;
+ const auto PLHANDLE = plugin->m_pHandle;
- Debug::log(LOG, " [PluginSystem] Plugin {} unloaded.", plugin->name);
+ std::erase_if(m_vLoadedPlugins, [&](const auto& other) { return other->m_pHandle == PLHANDLE; });
- std::erase_if(m_vLoadedPlugins, [&](const auto& other) { return other->m_pHandle == plugin->m_pHandle; });
+ dlclose(PLHANDLE);
+
+ Debug::log(LOG, " [PluginSystem] Plugin {} unloaded.", PLNAME);
// reload config to fix some stuf like e.g. unloadedPluginVars
g_pConfigManager->m_bForceReload = true;