Merge pull request #634 from micro/rcache-stop
Stop a goroutine leak in registy
This commit is contained in:
commit
04404441a4
15
registry/cache/rcache.go
vendored
15
registry/cache/rcache.go
vendored
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user