diff --git a/src/mod/plugins/plugins.go b/src/mod/plugins/plugins.go index 1bf1666..1a703b4 100644 --- a/src/mod/plugins/plugins.go +++ b/src/mod/plugins/plugins.go @@ -108,8 +108,8 @@ func (m *Manager) LoadPluginsFromDisk() error { // GetPluginByID returns a plugin by its ID func (m *Manager) GetPluginByID(pluginID string) (*Plugin, error) { m.loadedPluginsMutex.RLock() - defer m.loadedPluginsMutex.RUnlock() plugin, ok := m.LoadedPlugins[pluginID] + m.loadedPluginsMutex.RUnlock() if !ok { return nil, errors.New("plugin not found") } @@ -155,10 +155,10 @@ func (m *Manager) GetPluginPreviousEnableState(pluginID string) bool { func (m *Manager) ListLoadedPlugins() ([]*Plugin, error) { plugins := []*Plugin{} m.loadedPluginsMutex.RLock() - defer m.loadedPluginsMutex.RUnlock() for _, plugin := range m.LoadedPlugins { plugins = append(plugins, plugin) } + m.loadedPluginsMutex.RUnlock() return plugins, nil } @@ -175,13 +175,19 @@ func (m *Manager) LogForPlugin(p *Plugin, message string, err error) { // Terminate all plugins and exit func (m *Manager) Close() { m.loadedPluginsMutex.Lock() - defer m.loadedPluginsMutex.Unlock() + pluginsToStop := make([]*Plugin, 0) for _, plugin := range m.LoadedPlugins { if plugin.Enabled { - m.Options.Logger.PrintAndLog("plugin-manager", "Stopping plugin: "+plugin.Spec.Name, nil) - m.StopPlugin(plugin.Spec.ID) + pluginsToStop = append(pluginsToStop, plugin) } } + m.loadedPluginsMutex.Unlock() + + for _, thisPlugin := range pluginsToStop { + m.Options.Logger.PrintAndLog("plugin-manager", "Stopping plugin: "+thisPlugin.Spec.Name, nil) + m.StopPlugin(thisPlugin.Spec.ID) + } + } /* Plugin Functions */ diff --git a/src/mod/plugins/static_forwarder.go b/src/mod/plugins/static_forwarder.go index 37a20b5..d4b44f4 100644 --- a/src/mod/plugins/static_forwarder.go +++ b/src/mod/plugins/static_forwarder.go @@ -46,7 +46,6 @@ func (m *Manager) GetForwarderRadixTreeFromPlugins(pluginIds []string) *radix.Tr // Iterate over the loaded plugins and insert their paths into the radix tree m.loadedPluginsMutex.RLock() - defer m.loadedPluginsMutex.RUnlock() for _, plugin := range m.LoadedPlugins { if !plugin.Enabled { //Ignore disabled plugins @@ -90,6 +89,6 @@ func (m *Manager) GetForwarderRadixTreeFromPlugins(pluginIds []string) *radix.Tr } } } - + m.loadedPluginsMutex.RUnlock() return r } diff --git a/src/start.go b/src/start.go index 7c73b84..890bd9a 100644 --- a/src/start.go +++ b/src/start.go @@ -320,12 +320,11 @@ func startupSequence() { }, }) - /* - err = pluginManager.LoadPluginsFromDisk() - if err != nil { - SystemWideLogger.PrintAndLog("Plugin Manager", "Failed to load plugins", err) - } - */ + err = pluginManager.LoadPluginsFromDisk() + if err != nil { + SystemWideLogger.PrintAndLog("Plugin Manager", "Failed to load plugins", err) + } + /* Docker UX Optimizer */ if runtime.GOOS == "windows" && *runningInDocker { SystemWideLogger.PrintAndLog("warning", "Invalid start flag combination: docker=true && runtime.GOOS == windows. Running in docker UX development mode.", nil)