Stop a goroutine leak in registy

This commit is contained in:
Asim Aslam 2019-08-01 23:03:11 +01:00 committed by Vasiliy Tolstov
parent 926aba3801
commit e2218c7819

View File

@ -325,18 +325,27 @@ func (c *cache) run(service string) {
// watch loops the next event and calls update // watch loops the next event and calls update
// it returns if there's an error // it returns if there's an error
func (c *cache) watch(w registry.Watcher) error { func (c *cache) watch(w registry.Watcher) error {
defer w.Stop() // used to stop the watch
stop := make(chan bool)
// manage this loop // manage this loop
go func() { go func() {
defer w.Stop()
select {
// wait for exit // wait for exit
<-c.exit case <-c.exit:
w.Stop() return
// we've been stopped
case <-stop:
return
}
}() }()
for { for {
res, err := w.Next() res, err := w.Next()
if err != nil { if err != nil {
close(stop)
return err return err
} }
c.update(res) c.update(res)