zhangqian
2023-10-31 1bd5a7bed8212e7739fb996a9f4f56118f47c488
fix dead lock
2个文件已修改
12 ■■■■■ 已修改文件
main.go 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
middleware/refresh_user.go 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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())
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