From badf05f6b153ebe2d7c226e9b2d0665df74bb0ba Mon Sep 17 00:00:00 2001 From: buvidk <1532493290@qq.com> Date: Thu, 9 Jul 2026 00:34:04 +0800 Subject: [PATCH] fix(msggateway): avoid closed channel panic in super group push --- internal/msggateway/hub_server.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/msggateway/hub_server.go b/internal/msggateway/hub_server.go index 6467b7e0f..109cd7c00 100644 --- a/internal/msggateway/hub_server.go +++ b/internal/msggateway/hub_server.go @@ -175,22 +175,22 @@ func (s *Server) SuperGroupOnlineBatchPushOneMsg(ctx context.Context, req *msgga ch := make(chan *msggateway.SingleMsgToUserResults, len(req.PushToUserIDs)) var count atomic.Int64 count.Add(int64(len(req.PushToUserIDs))) + pushResult := func(result *msggateway.SingleMsgToUserResults) { + ch <- result + if count.Add(-1) == 0 { + close(ch) + } + } for i := range req.PushToUserIDs { userID := req.PushToUserIDs[i] err := s.queue.PushCtx(ctx, func() { - ch <- s.pushToUser(ctx, userID, req.MsgData) - if count.Add(-1) == 0 { - close(ch) - } + pushResult(s.pushToUser(ctx, userID, req.MsgData)) }) if err != nil { - if count.Add(-1) == 0 { - close(ch) - } log.ZError(ctx, "pushToUser MemoryQueue failed", err, "userID", userID) - ch <- &msggateway.SingleMsgToUserResults{ + pushResult(&msggateway.SingleMsgToUserResults{ UserID: userID, - } + }) } } resp := &msggateway.OnlineBatchPushOneMsgResp{