diff --git a/registry/base_registry.go b/registry/base_registry.go
index 17dfdcbe19e424dad47bf585370bb932645991f6..3a9569740f901bc6ecaf692f89c871a54e92dd9d 100644
--- a/registry/base_registry.go
+++ b/registry/base_registry.go
@@ -138,9 +138,9 @@ func (r *BaseRegistry) Register(conf common.URL) error {
 	)
 	role, _ := strconv.Atoi(r.URL.GetParam(constant.ROLE_KEY, ""))
 	// Check if the service has been registered
-	r.cltLock.RLock()
+	r.cltLock.Lock()
 	_, ok = r.services[conf.Key()]
-	r.cltLock.RUnlock()
+	r.cltLock.Unlock()
 	if ok {
 		return perrors.Errorf("Path{%s} has been registered", conf.Key())
 	}
@@ -158,27 +158,28 @@ func (r *BaseRegistry) Register(conf common.URL) error {
 	return nil
 }
 
-// UnRegister
+// UnRegister implement interface registry to unregister
 func (r *BaseRegistry) UnRegister(conf common.URL) error {
 	var (
 		ok     bool
 		err    error
 		oldURL common.URL
 	)
-	func() {
-		r.cltLock.RLock()
-		defer r.cltLock.RUnlock()
-		oldURL, ok = r.services[conf.Key()]
-	}()
 
 	func() {
-		r.cltLock.RLock()
+		r.cltLock.Lock()
 		defer r.cltLock.Unlock()
+		oldURL, ok = r.services[conf.Key()]
+
+		if !ok {
+			err = perrors.Errorf("Path{%s} has not registered", conf.Key())
+		}
+
 		delete(r.services, conf.Key())
 	}()
 
-	if !ok {
-		return perrors.Errorf("Path{%s} has not registered", conf.Key())
+	if err != nil {
+		return err
 	}
 
 	err = r.unregister(conf)
diff --git a/registry/nacos/registry.go b/registry/nacos/registry.go
index 6c8749ff381de6d8ce98704b800dbae574f10cae..c98bbc7843d4317d9f7d74040481052b28c0f493 100644
--- a/registry/nacos/registry.go
+++ b/registry/nacos/registry.go
@@ -150,14 +150,14 @@ func (nr *nacosRegistry) Subscribe(url *common.URL, notifyListener registry.Noti
 	for {
 		if !nr.IsAvailable() {
 			logger.Warnf("event listener game over.")
-			return
+			return perrors.New("nacosRegistry is not available.")
 		}
 
 		listener, err := nr.subscribe(url)
 		if err != nil {
 			if !nr.IsAvailable() {
 				logger.Warnf("event listener game over.")
-				return
+				return err
 			}
 			logger.Warnf("getListener() = err:%v", perrors.WithStack(err))
 			time.Sleep(time.Duration(RegistryConnDelay) * time.Second)
@@ -169,7 +169,7 @@ func (nr *nacosRegistry) Subscribe(url *common.URL, notifyListener registry.Noti
 			if err != nil {
 				logger.Warnf("Selector.watch() = error{%v}", perrors.WithStack(err))
 				listener.Close()
-				return
+				return err
 			}
 
 			logger.Infof("update begin, service event: %v", serviceEvent.String())