From 1bd5a7bed8212e7739fb996a9f4f56118f47c488 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期二, 31 十月 2023 17:57:26 +0800
Subject: [PATCH] fix dead lock

---
 middleware/refresh_user.go |   10 +++++++---
 main.go                    |    2 +-
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/main.go b/main.go
index 4996087..e8f5027 100644
--- a/main.go
+++ b/main.go
@@ -50,7 +50,7 @@
 	middleware.InitUserConn()
 	v1.InitCodeServiceConn()
 
-	middleware.InitRefreshUserManager(1, 5, 3600)
+	middleware.InitRefreshUserManager(2, 1, 120)
 	middleware.RunRefreshUser() ///瀹氭椂瀵规椿璺冪敤鎴锋洿鏂扮敤鎴疯鎯�
 
 	logx.Error(server.ListenAndServe().Error())
diff --git a/middleware/refresh_user.go b/middleware/refresh_user.go
index c9b5b44..54ebd3e 100644
--- a/middleware/refresh_user.go
+++ b/middleware/refresh_user.go
@@ -91,16 +91,20 @@
 		select {
 		case <-ticker.C:
 			nowTs := time.Now().Unix()
+			var users []*CurrentActiveUser
 			r.mu.RLock()
-			for userID, user := range r.Users {
+			for _, user := range r.Users {
+				users = append(users, user)
+			}
+			r.mu.RUnlock()
+			for _, user := range users {
 				if nowTs-user.lastActiveTime > r.expireSecond {
 					r.mu.Lock()
 					logx.Infof("removed in active user:%+v", user)
-					delete(r.Users, userID)
+					delete(r.Users, user.UserID)
 					r.mu.Unlock()
 				}
 			}
-			r.mu.RUnlock()
 		case <-r.ctx.Done():
 			fmt.Println("stop RemoveInActiveUser.")
 			return

--
Gitblit v1.8.0