From d87cc0484f99882b26f7cc2de2220459b58339ca Mon Sep 17 00:00:00 2001 From: HimbeerserverDE Date: Mon, 6 Sep 2021 18:26:24 +0200 Subject: Only load plugins once + memory optimisations --- plugin.go | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) (limited to 'plugin.go') diff --git a/plugin.go b/plugin.go index 2f7a803..d388d1d 100644 --- a/plugin.go +++ b/plugin.go @@ -8,13 +8,17 @@ import ( "sync" ) -var plugins []*plugin.Plugin -var pluginsMu sync.RWMutex +var plugins map[*plugin.Plugin]struct{} +var pluginsOnce sync.Once -func LoadPlugins() error { +func LoadPlugins() { + pluginsOnce.Do(loadPlugins) +} + +func loadPlugins() { executable, err := os.Executable() if err != nil { - return err + log.Fatal("{←|⇶} ", err) } path := filepath.Dir(executable) + "/plugins" @@ -22,14 +26,10 @@ func LoadPlugins() error { dir, err := os.ReadDir(path) if err != nil { - return err + log.Fatal("{←|⇶} ", err) } - pluginsMu.Lock() - defer pluginsMu.Unlock() - - plugins = []*plugin.Plugin{} - + plugins = make(map[*plugin.Plugin]struct{}) for _, file := range dir { p, err := plugin.Open(path + "/" + file.Name()) if err != nil { @@ -37,9 +37,8 @@ func LoadPlugins() error { continue } - plugins = append(plugins, p) + plugins[p] = struct{}{} } log.Print("{←|⇶} load plugins") - return nil } -- cgit v1.2.3