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 +++++++---
 1 files changed, 7 insertions(+), 3 deletions(-)

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