aboutsummaryrefslogtreecommitdiff
path: root/plugin.go
diff options
context:
space:
mode:
Diffstat (limited to 'plugin.go')
-rw-r--r--plugin.go23
1 files changed, 11 insertions, 12 deletions
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
}