Merge pull request #634 from micro/rcache-stop

Stop a goroutine leak in registy
This commit is contained in:
Asim Aslam 2019-08-01 23:17:39 +01:00 committed by GitHub
commit 04404441a4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

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