逻辑bug优化

This commit is contained in:
hahwu 2026-01-09 18:07:53 +08:00
parent b9f6cceda1
commit 02002e6c16
2 changed files with 23 additions and 11 deletions

View File

@ -464,6 +464,7 @@ func G_getGameLogic() *GameLogic {
G_GameLogicPtr.M_Players = sync.Map{}
G_GameLogicPtr.NotInitPlayer = new(Player)
G_GameLogicPtr.M_LimitActiveList = []int{}
G_GameLogicPtr.CreateMessageMgr() // 创建消息管理器
G_GameLogicPtr.OpenTimestampTick() // 开启时间戳计时器
G_GameLogicPtr.RegisterEvent() // 注册事件
G_GameLogicPtr.RegisterNetWorkFunc() // 注册客户端接口
@ -477,7 +478,6 @@ func G_getGameLogic() *GameLogic {
}
G_GameLogicPtr.CreateRankMgr() //创建排行榜管理器
G_GameLogicPtr.CreateMailMgr() //创建邮件管理器
G_GameLogicPtr.CreateMessageMgr() // 创建消息管理器
ClusterMgrInit() //初始化集群
G_GameLogicPtr.StartTime = time.Now().Unix()
// G_GameLogicPtr.CreateHttpManager()

View File

@ -199,13 +199,25 @@ func (L *LogMgr) InitManager() {
func (L *LogMgr) AddLog(logs *Log) {
// 复制结构体和 Param map避免并发修改导致 json.Marshal 时 panic
copyLog := *logs
// 安全地复制 map使用 defer recover 防止并发迭代时的 panic
if logs.Param != nil {
func() {
defer func() {
if r := recover(); r != nil {
// 发生 panic 时使用空 map
log.Debug("AddLog: concurrent map read/write detected, using empty map")
copyLog.Param = make(map[string]interface{})
}
}()
newParam := make(map[string]interface{}, len(logs.Param))
for k, v := range logs.Param {
newParam[k] = v
}
copyLog.Param = newParam
}()
}
// 如果已经开始关闭,直接丢弃
L.Lock.Lock()
if L.closing {
@ -214,7 +226,7 @@ func (L *LogMgr) AddLog(logs *Log) {
}
// 非阻塞入队:若通道满则先丢弃最旧一条再入队,避免阻塞调用者
select {
case L.L <- logs:
case L.L <- &copyLog:
L.Lock.Unlock()
return
default:
@ -225,7 +237,7 @@ func (L *LogMgr) AddLog(logs *Log) {
}
// 再尝试入队一次
select {
case L.L <- logs:
case L.L <- &copyLog:
default:
// 放不下就直接丢弃
}