From 7d1ed2577ed4de7b9a71e6bf0f01737b4cbbaece Mon Sep 17 00:00:00 2001 From: F0ur Date: Sat, 22 Aug 2020 23:06:53 +0800 Subject: [PATCH] fix(ws): fix eventConn panic when ws connect close --- server/websocket.go | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/server/websocket.go b/server/websocket.go index ce961439..784e1c20 100644 --- a/server/websocket.go +++ b/server/websocket.go @@ -324,18 +324,21 @@ func (c *websocketConn) handleRequest(bot *coolq.CQBot, payload []byte) { func (s *websocketServer) onBotPushEvent(m coolq.MSG) { s.eventConnMutex.Lock() defer s.eventConnMutex.Unlock() - pos := 0 - for _, conn := range s.eventConn { + for i, l := 0, len(s.eventConn); i 0 { - pos++ + next := i +1 + if next >= l { + next = l -1 } + s.eventConn[i], s.eventConn[next] = s.eventConn[next], s.eventConn[i] + s.eventConn = append(s.eventConn[:next], s.eventConn[next+1:]...) + i-- + l-- + conn = nil } - pos++ } }