mirror of
https://github.com/tobychui/zoraxy.git
synced 2025-06-01 13:17:21 +02:00
Fixed deadlock in plugin manager close
- Moved all mutex away from defer - Updated plugin manager close logic to prevent deadlock
This commit is contained in:
parent
dfd5ef5578
commit
4a99afa2f0
@ -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 */
|
||||
|
@ -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
|
||||
}
|
||||
|
11
src/start.go
11
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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user