From f323df466db7c003f161e02b573123b4e123ff30 Mon Sep 17 00:00:00 2001 From: Or Tzabary Date: Thu, 5 Jul 2018 16:12:03 +0300 Subject: [PATCH] Split the error handling from Consul Catalog (deadlock) --- provider/consulcatalog/consul_catalog.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/provider/consulcatalog/consul_catalog.go b/provider/consulcatalog/consul_catalog.go index 1c9010ccd..36f4860cc 100644 --- a/provider/consulcatalog/consul_catalog.go +++ b/provider/consulcatalog/consul_catalog.go @@ -1,7 +1,6 @@ package consulcatalog import ( - "errors" "fmt" "strconv" "strings" @@ -155,14 +154,8 @@ func (p *Provider) watch(configurationChan chan<- types.ConfigMessage, stop chan defer close(stopCh) defer close(watchCh) - for { - select { - case <-stop: - return nil - case index, ok := <-watchCh: - if !ok { - return errors.New("consul service list nil") - } + safe.Go(func() { + for index := range watchCh { log.Debug("List of services changed") nodes, err := p.getNodes(index) if err != nil { @@ -173,6 +166,13 @@ func (p *Provider) watch(configurationChan chan<- types.ConfigMessage, stop chan ProviderName: "consul_catalog", Configuration: configuration, } + } + }) + + for { + select { + case <-stop: + return nil case err := <-errorCh: return err }