diff --git a/registry/zookeeper/registry.go b/registry/zookeeper/registry.go index bfbb71d53c6784602dfbc4147455c46b39145ed4..895242afc51e088e56ae0407650bef16d7fdac23 100644 --- a/registry/zookeeper/registry.go +++ b/registry/zookeeper/registry.go @@ -190,9 +190,11 @@ func (r *zkRegistry) getListener(conf *common.URL) (*RegistryConfigurationListen var zkListener *RegistryConfigurationListener if r.dataListener.subscribed[conf] != nil { - zkListener, err := r.dataListener.subscribed[conf].(*RegistryConfigurationListener) - if err != nil && zkListener.isClosed { - return nil, perrors.New("zk connection broken") + zkListener, _ := r.dataListener.subscribed[conf].(*RegistryConfigurationListener) + r.listenerLock.Lock() + if zkListener.isClosed { + r.listenerLock.Unlock() + return nil, perrors.New("configListener already been closed") } } @@ -219,5 +221,6 @@ func (r *zkRegistry) getListener(conf *common.URL) (*RegistryConfigurationListen go r.listener.ListenServiceEvent(fmt.Sprintf("/dubbo/%s/"+constant.DEFAULT_CATEGORY, url.QueryEscape(conf.Service())), r.dataListener) + return zkListener, nil }