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
 }