Merge pull request #2201 from prometheus/consul-race

discovery: terminate senders before closing channel
This commit is contained in:
Julius Volz 2016-11-18 01:07:34 -08:00 committed by GitHub
commit 9b7e097a76
1 changed files with 11 additions and 2 deletions

View File

@ -18,6 +18,7 @@ import (
"net"
"strconv"
"strings"
"sync"
"time"
consul "github.com/hashicorp/consul/api"
@ -132,7 +133,11 @@ func (cd *Discovery) shouldWatch(name string) bool {
// Run implements the TargetProvider interface.
func (cd *Discovery) Run(ctx context.Context, ch chan<- []*config.TargetGroup) {
defer close(ch)
var wg sync.WaitGroup
defer func() {
wg.Wait()
close(ch)
}()
// Watched services and their cancelation functions.
services := map[string]func(){}
@ -199,7 +204,11 @@ func (cd *Discovery) Run(ctx context.Context, ch chan<- []*config.TargetGroup) {
}
wctx, cancel := context.WithCancel(ctx)
go srv.watch(wctx, ch)
wg.Add(1)
go func() {
srv.watch(wctx, ch)
wg.Done()
}()
services[name] = cancel
}