diff --git a/router/router.go b/router/router.go index 8b13e9328..43bef545f 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 @@ -177,9 +182,9 @@ func (self *Router) Run() error { if err := self.Start(); err != nil { return err } - for { - time.Sleep(1 * time.Hour) - } + + <-self.shutdownDoneC + return nil } func (self *Router) showOptions() {