From e9d1565115f29ba6a17867849102daedffcb827d Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 26 Jan 2026 10:19:05 +0800 Subject: [PATCH] =?UTF-8?q?bug=E6=BC=8F=E6=B4=9E=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=EF=BC=9B1.processtrigger=20=E6=BC=8F=E5=8A=A0=E9=94=81?= =?UTF-8?q?=EF=BC=9B2message=5Fmgr=E7=A9=BA=E6=8C=87=E9=92=88=E6=8A=A5?= =?UTF-8?q?=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/external.go | 4 +++- src/server/game/message_mgr.go | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/server/game/external.go b/src/server/game/external.go index 40c6271b..9039a031 100644 --- a/src/server/game/external.go +++ b/src/server/game/external.go @@ -181,16 +181,18 @@ func HandleClientReq(args []interface{}) { db.UpdateAccountInfoDeviceToDb(accountInfo) p, _ := internal.Agents.Load(a) if p != nil { + p.(*Player).lock.Lock() //加锁 + defer p.(*Player).lock.Unlock() //解锁 log.Debug("player %s login success", detail.UserName) p.(*Player).PlayMod.getBaseMod().DiviceId = detail.Device //加锁 p.(*Player).PushClientRes(ResLogin) p.(*Player).LoginBackData() p.(*Player).TeLog("Login_log", nil) + p.(*Player).ProcessTrigger() } if newPlayer { log.Debug("uid : %d, init user process : %s, execTime : %v , isNew: %v", p.(*Player).M_DwUin, m.GetFunc(), time.Since(start), newPlayer) } - p.(*Player).ProcessTrigger() case "ReqServerTime": // 获取服务器时间 detail := &msg.ReqServerTime{} proto.Unmarshal(buf, detail) diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 98aecb1d..a1b97f47 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -286,6 +286,9 @@ func ComsumerMsgHandler(data *msg.Msg) (interface{}, error) { messages.mu.Lock() defer messages.mu.Unlock() for i, msgItem := range messages.Messages { + if msgItem == nil { + continue + } if msgItem.UniKey == data.UniKey { // 删除消息 messages.Messages = append(messages.Messages[:i], messages.Messages[i+1:]...) @@ -766,6 +769,12 @@ func FriendMgrSend(m1 *msg.Msg) error { // 异步发送消息到指定节点 节点不在线则保存消息 func sendMessageAsync(m *msg.Msg, node int) error { + defer func() { + if r := recover(); r != nil { + log.Error("message_mgr fatal : sendMessageAsync err:%s", fmt.Sprintf("fatal : %s", r)) + GoUtil.SendFeishuFatal(0, "sendMessageAsync", fmt.Sprintf("fatal : %s", r)) + } + }() log.Debug("[Middleware] Send Async message to node: %d, message: %v", node, m) err := mergeCluster.SendServerMsg(m, node) if err != nil && GoUtil.InArray(m.HandleType, save_msg_type) { @@ -778,6 +787,12 @@ func sendMessageAsync(m *msg.Msg, node int) error { // 同步消息到指定节点 节点不在线则保存消息 func sendMessageSync(m *msg.Msg, node int) (*msg.Msg, error) { + defer func() { + if r := recover(); r != nil { + log.Error("message_mgr fatal : sendMessageSync err:%s", fmt.Sprintf("fatal : %s", r)) + GoUtil.SendFeishuFatal(0, "sendMessageSync", fmt.Sprintf("fatal : %s", r)) + } + }() log.Debug("[Middleware] Send Sync message to node: %d, message: %v", node, m) msg, err := mergeCluster.CallServerMsg(m, node) if err != nil && conf.Server.ServerType == "center" && GoUtil.InArray(m.HandleType, save_msg_type) {