From d05a450f5310223f57944ec916990e858fcbda81 Mon Sep 17 00:00:00 2001 From: Andrew Martinez Date: Wed, 24 Mar 2021 15:49:15 -0400 Subject: [PATCH 1/2] instead of sleeping in a for loop, watch for shutdown done --- router/router.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/router/router.go b/router/router.go index 8b13e9328..c27c296fa 100644 --- a/router/router.go +++ b/router/router.go @@ -67,6 +67,7 @@ type Router struct { xgressListeners []xgress.Listener metricsRegistry metrics.UsageRegistry shutdownC chan struct{} + shutdownDoneC chan struct{} isShutdown concurrenz.AtomicBoolean eventDispatcher event.Dispatcher metricsReporter metrics.Handler @@ -107,6 +108,7 @@ func Create(config *Config, versionProvider common.VersionProvider) *Router { forwarder: fwd, metricsRegistry: metricsRegistry, shutdownC: closeNotify, + shutdownDoneC: make(chan struct{}), eventDispatcher: eventDispatcher, versionProvider: versionProvider, } @@ -151,6 +153,7 @@ func (self *Router) Shutdown() error { } close(self.shutdownC) + close(self.xctrlDone) for _, xlinkListener := range self.xlinkListeners { if err := xlinkListener.Close(); err != nil { @@ -163,6 +166,8 @@ func (self *Router) Shutdown() error { errors = append(errors, err) } } + + close(self.shutdownDoneC) } if len(errors) == 0 { return nil @@ -178,7 +183,10 @@ func (self *Router) Run() error { return err } for { - time.Sleep(1 * time.Hour) + select { + case <-self.shutdownDoneC: + return nil + } } } From 0a993f410dd186e2a2442f06d08f6cfb7cdf22d5 Mon Sep 17 00:00:00 2001 From: Andrew Martinez Date: Wed, 24 Mar 2021 16:28:08 -0400 Subject: [PATCH 2/2] remove for/select --- router/router.go | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/router/router.go b/router/router.go index c27c296fa..43bef545f 100644 --- a/router/router.go +++ b/router/router.go @@ -182,12 +182,9 @@ func (self *Router) Run() error { if err := self.Start(); err != nil { return err } - for { - select { - case <-self.shutdownDoneC: - return nil - } - } + + <-self.shutdownDoneC + return nil } func (self *Router) showOptions() {