From b4a743898ee62b9cc8c56b154327668014162a8e Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Tue, 25 Feb 2020 02:16:00 +0300 Subject: [PATCH] fix router panic (#1254) Signed-off-by: Vasiliy Tolstov --- router/default.go | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/router/default.go b/router/default.go index d89ce13a..47da6ba0 100644 --- a/router/default.go +++ b/router/default.go @@ -368,9 +368,11 @@ func (r *router) advertiseEvents() error { time.Sleep(time.Second) } - // reset - w.Stop() - w = nil + if w != nil { + // reset + w.Stop() + w = nil + } } } }() @@ -467,7 +469,9 @@ func (r *router) advertiseEvents() error { a.penalty += Penalty log.Debugf("Router advert %d for route %s %s event penalty: %f", hash, a.event.Route.Service, a.event.Route.Address, a.penalty) case <-r.exit: - w.Stop() + if w != nil { + w.Stop() + } return nil } } @@ -700,16 +704,15 @@ func (r *router) Stop() error { // extract the events r.drain() + r.sub.Lock() // close advert subscribers for id, sub := range r.subscribers { // close the channel close(sub) - // delete the subscriber - r.sub.Lock() delete(r.subscribers, id) - r.sub.Unlock() } + r.sub.Unlock() } // remove event chan