diff --git a/pkg/rpc/server/server.go b/pkg/rpc/server/server.go index bcd0ea09f..07410775b 100644 --- a/pkg/rpc/server/server.go +++ b/pkg/rpc/server/server.go @@ -50,6 +50,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/vm/emit" "github.com/nspcc-dev/neo-go/pkg/vm/opcode" "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" + "go.uber.org/atomic" "go.uber.org/zap" ) @@ -66,6 +67,7 @@ type ( log *zap.Logger https *http.Server shutdown chan struct{} + started *atomic.Bool subsLock sync.RWMutex subscribers map[*subscriber]bool @@ -188,6 +190,7 @@ func New(chain blockchainer.Blockchainer, conf rpc.Config, coreServer *network.S oracle: orc, https: tlsServer, shutdown: make(chan struct{}), + started: atomic.NewBool(false), subscribers: make(map[*subscriber]bool), // These are NOT buffered to preserve original order of events. @@ -207,6 +210,10 @@ func (s *Server) Start(errChan chan error) { s.log.Info("RPC server is not enabled") return } + if !s.started.CAS(false, true) { + s.log.Info("RPC server already started") + return + } s.Handler = http.HandlerFunc(s.handleHTTPRequest) s.log.Info("starting rpc-server", zap.String("endpoint", s.Addr))