diff --git a/internal/proxyservice/impl.go b/internal/proxyservice/impl.go
index 34f55af4ac35593dfb56184eaff2a9f58db73b9b..7881fbc9881f997491865a675d5319a259f1c6b3 100644
--- a/internal/proxyservice/impl.go
+++ b/internal/proxyservice/impl.go
@@ -141,16 +141,9 @@ func (s *ServiceImpl) Stop() error {
 	s.tick.Close()
 	log.Println("close time tick")
 
-	var err error
-	nodeClients, err := s.nodeInfos.ObtainAllClients()
+	err := s.nodeInfos.ReleaseAllClients()
 	if err != nil {
-		return err
-	}
-	for _, nodeClient := range nodeClients {
-		err = nodeClient.Stop()
-		if err != nil {
-			return err
-		}
+		panic(err)
 	}
 	log.Println("stop all node clients ...")
 
diff --git a/internal/proxyservice/node_info.go b/internal/proxyservice/node_info.go
index 321d3df0de718bd673c4815a7c6662a3ff9d3bfc..0bceb22fbe6300178b681b1dd7db59e22fa2ad1d 100644
--- a/internal/proxyservice/node_info.go
+++ b/internal/proxyservice/node_info.go
@@ -79,6 +79,8 @@ func (table *GlobalNodeInfoTable) Register(id UniqueID, info *NodeInfo) error {
 }
 
 func (table *GlobalNodeInfoTable) createClients() error {
+	log.Println("infos: ", table.infos)
+	log.Println("clients: ", table.clients)
 	if len(table.clients) == len(table.infos) {
 		return nil
 	}
@@ -91,11 +93,11 @@ func (table *GlobalNodeInfoTable) createClients() error {
 			var err error
 			err = table.clients[nodeID].Init()
 			if err != nil {
-				return err
+				panic(err)
 			}
 			err = table.clients[nodeID].Start()
 			if err != nil {
-				return err
+				panic(err)
 			}
 		}
 	}
@@ -103,6 +105,26 @@ func (table *GlobalNodeInfoTable) createClients() error {
 	return nil
 }
 
+func (table *GlobalNodeInfoTable) ReleaseAllClients() error {
+	table.createClientMtx.Lock()
+	log.Println("get write lock")
+	defer func() {
+		table.createClientMtx.Unlock()
+		log.Println("release write lock")
+	}()
+
+	var err error
+	for id, client := range table.clients {
+		err = client.Stop()
+		if err != nil {
+			panic(err)
+		}
+		delete(table.clients, id)
+	}
+
+	return nil
+}
+
 func (table *GlobalNodeInfoTable) ObtainAllClients() (map[UniqueID]NodeClient, error) {
 	table.mtx.RLock()
 	defer table.mtx.RUnlock()