From e62e02815bed0743d9cf7038c5f15aeee7ec4f99 Mon Sep 17 00:00:00 2001 From: Alex Vanin Date: Tue, 5 Apr 2022 13:20:23 +0300 Subject: [PATCH] [#1291] listener: Stop only once Signed-off-by: Alex Vanin --- pkg/innerring/innerring.go | 4 +--- pkg/morph/event/listener.go | 13 ++++++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/pkg/innerring/innerring.go b/pkg/innerring/innerring.go index 1a38f603..24792458 100644 --- a/pkg/innerring/innerring.go +++ b/pkg/innerring/innerring.go @@ -282,9 +282,7 @@ func (s *Server) Stop() { s.setHealthStatus(control.HealthStatus_SHUTTING_DOWN) go s.morphListener.Stop() - if !s.withoutMainNet { - go s.mainnetListener.Stop() - } + go s.mainnetListener.Stop() for _, c := range s.closers { if err := c(); err != nil { diff --git a/pkg/morph/event/listener.go b/pkg/morph/event/listener.go index 54c01df1..efd58110 100644 --- a/pkg/morph/event/listener.go +++ b/pkg/morph/event/listener.go @@ -90,7 +90,7 @@ type ListenerParams struct { type listener struct { mtx *sync.RWMutex - once *sync.Once + startOnce, stopOnce *sync.Once started bool @@ -124,7 +124,7 @@ var ( // // Returns an error if listener was already started. func (l listener) Listen(ctx context.Context) { - l.once.Do(func() { + l.startOnce.Do(func() { if err := l.listen(ctx, nil); err != nil { l.log.Error("could not start listen to events", zap.String("error", err.Error()), @@ -140,7 +140,7 @@ func (l listener) Listen(ctx context.Context) { // // Returns an error if listener was already started. func (l listener) ListenWithError(ctx context.Context, intError chan<- error) { - l.once.Do(func() { + l.startOnce.Do(func() { if err := l.listen(ctx, intError); err != nil { l.log.Error("could not start listen to events", zap.String("error", err.Error()), @@ -570,7 +570,9 @@ func (l listener) RegisterNotaryHandler(hi NotaryHandlerInfo) { // Stop closes subscription channel with remote neo node. func (l listener) Stop() { - l.subscriber.Close() + l.stopOnce.Do(func() { + l.subscriber.Close() + }) } func (l *listener) RegisterBlockHandler(handler BlockHandler) { @@ -593,7 +595,8 @@ func NewListener(p ListenerParams) (Listener, error) { return &listener{ mtx: new(sync.RWMutex), - once: new(sync.Once), + startOnce: new(sync.Once), + stopOnce: new(sync.Once), notificationParsers: make(map[scriptHashWithType]NotificationParser), notificationHandlers: make(map[scriptHashWithType][]Handler), log: p.Logger,