From ca99408e1316acbc386bf8d170676e7f59a23cb9 Mon Sep 17 00:00:00 2001 From: Javier Guerra Date: Tue, 19 Nov 2019 11:49:03 -0500 Subject: [PATCH] refactor(*) stronger concurrency locks --- event.go | 2 +- main.go | 4 +++- pluginserver.go | 7 +++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/event.go b/event.go index c5cfe67..bdf63eb 100644 --- a/event.go +++ b/event.go @@ -25,7 +25,7 @@ type eventData struct { // they all receive the same object instance, so should be careful if it's // mutated or holds references to mutable data. // -// RPC exported data +// RPC exported method func (s PluginServer) HandleEvent(in StartEventData, out *StepData) error { s.lock.RLock() instance, ok := s.instances[in.InstanceId] diff --git a/main.go b/main.go index fbfffa0..9794dfa 100644 --- a/main.go +++ b/main.go @@ -14,6 +14,8 @@ var socket = flag.String("socket", "", "Socket to listen into") func runServer(listener net.Listener) { var handle codec.MsgpackHandle + handle.ReaderBufferSize = 4096 + handle.WriterBufferSize = 4096 for { conn, err := listener.Accept() @@ -22,7 +24,7 @@ func runServer(listener net.Listener) { return } rpcCodec := codec.MsgpackSpecRpc.ServerCodec(conn, &handle) - rpc.ServeCodec(rpcCodec) + go rpc.ServeCodec(rpcCodec) } } diff --git a/pluginserver.go b/pluginserver.go index 067370d..0419a96 100644 --- a/pluginserver.go +++ b/pluginserver.go @@ -52,9 +52,10 @@ type pluginData struct { } func (s PluginServer) loadPlugin(name string) (plug *pluginData, err error) { - s.lock.RLock() + s.lock.Lock() + defer s.lock.Unlock() + plug, ok := s.plugins[name] - s.lock.RUnlock() if ok { return } @@ -84,9 +85,7 @@ func (s PluginServer) loadPlugin(name string) (plug *pluginData, err error) { config: constructor(), } - s.lock.Lock() s.plugins[name] = plug - s.lock.Unlock() return }