diff --git a/registry/zookeeper/listener.go b/registry/zookeeper/listener.go index ec82fa0309118fba4b5c21772d4dfd356f3b0c5c..48f4ee5e4095d04708b229a14202fab6b72a023a 100644 --- a/registry/zookeeper/listener.go +++ b/registry/zookeeper/listener.go @@ -104,6 +104,7 @@ func (l *RegistryDataListener) DataChange(eventType remoting.Event) bool { func (l *RegistryDataListener) Close() { l.mutex.Lock() defer l.mutex.Unlock() + l.closed = true for _, listener := range l.subscribed { listener.(*RegistryConfigurationListener).Close() } diff --git a/registry/zookeeper/registry.go b/registry/zookeeper/registry.go index e8ee51beb70b5a08ec60b213c5342ef52972c59f..0602f076dfbc00129dfdef4f3aa9d70419a1765d 100644 --- a/registry/zookeeper/registry.go +++ b/registry/zookeeper/registry.go @@ -127,15 +127,15 @@ func (r *zkRegistry) InitListeners() { oldDataListener := r.dataListener oldDataListener.mutex.Lock() defer oldDataListener.mutex.Unlock() - recoverd := r.dataListener.subscribed - if recoverd != nil && len(recoverd) > 0 { + r.dataListener.closed = true + recovered := r.dataListener.subscribed + if recovered != nil && len(recovered) > 0 { // recover all subscribed url - for _, oldListener := range recoverd { + for _, oldListener := range recovered { var ( regConfigListener *RegistryConfigurationListener ok bool ) - if regConfigListener, ok = oldListener.(*RegistryConfigurationListener); ok { regConfigListener.Close() } @@ -292,10 +292,10 @@ func (r *zkRegistry) getCloseListener(conf *common.URL) (*RegistryConfigurationL r.dataListener.mutex.Lock() configurationListener := r.dataListener.subscribed[conf.ServiceKey()] if configurationListener != nil { - zkListener, _ := configurationListener.(*RegistryConfigurationListener) if zkListener != nil { if zkListener.isClosed { + r.dataListener.mutex.Unlock() return nil, perrors.New("configListener already been closed") } }