diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2021-09-06 18:26:24 +0200 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2021-09-06 18:26:24 +0200 |
commit | d87cc0484f99882b26f7cc2de2220459b58339ca (patch) | |
tree | 7e492028150e6a5f8d2aa1531754fbbcfb7ca683 | |
parent | 18a80c7a57639a540965f9b101db18c6490cd804 (diff) |
Only load plugins once + memory optimisations
-rw-r--r-- | client_conn.go | 4 | ||||
-rw-r--r-- | cmd/mt-multiserver-proxy/proxy.go (renamed from cmd/mt-multiserver-proxy/main.go) | 4 | ||||
-rw-r--r-- | listen.go | 4 | ||||
-rw-r--r-- | plugin.go | 23 |
4 files changed, 15 insertions, 20 deletions
diff --git a/client_conn.go b/client_conn.go index 9278578..bffc0e7 100644 --- a/client_conn.go +++ b/client_conn.go @@ -566,8 +566,7 @@ func handleClt(cc *ClientConn) { cc.Log("-->", append([]string{"cmd", cmdName}, args...)) - pluginsMu.RLock() - for _, p := range plugins { + for p := range plugins { sym, err := p.Lookup("HandleChatCmd") if err != nil { cc.Log("-->", err) @@ -581,7 +580,6 @@ func handleClt(cc *ClientConn) { } } } - pluginsMu.RUnlock() if !handled { cc.SendCmd(&mt.ToCltChatMsg{ diff --git a/cmd/mt-multiserver-proxy/main.go b/cmd/mt-multiserver-proxy/proxy.go index e1b2b19..71c1f33 100644 --- a/cmd/mt-multiserver-proxy/main.go +++ b/cmd/mt-multiserver-proxy/proxy.go @@ -19,9 +19,7 @@ func main() { } if !proxy.Conf().NoPlugins { - if err := proxy.LoadPlugins(); err != nil { - log.Fatal("{←|⇶} ", err) - } + proxy.LoadPlugins() } var err error @@ -10,7 +10,7 @@ import ( type Listener struct { mt.Listener - mu sync.RWMutex + mu sync.RWMutex clts map[*ClientConn]struct{} } @@ -18,7 +18,7 @@ type Listener struct { func Listen(pc net.PacketConn) *Listener { return &Listener{ Listener: mt.Listen(pc), - clts: make(map[*ClientConn]struct{}), + clts: make(map[*ClientConn]struct{}), } } @@ -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 } |