From 7d1ed2577ed4de7b9a71e6bf0f01737b4cbbaece Mon Sep 17 00:00:00 2001 From: F0ur Date: Sat, 22 Aug 2020 23:06:53 +0800 Subject: [PATCH 1/2] 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 ce96143..784e1c2 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++ } } From 8a8ce4049d73aa59b1b8dd3b8c5e1bd15b62f2b3 Mon Sep 17 00:00:00 2001 From: F0ur Date: Sat, 22 Aug 2020 23:09:22 +0800 Subject: [PATCH 2/2] perf: format code --- server/websocket.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/server/websocket.go b/server/websocket.go index 784e1c2..bae7439 100644 --- a/server/websocket.go +++ b/server/websocket.go @@ -324,14 +324,14 @@ func (c *websocketConn) handleRequest(bot *coolq.CQBot, payload []byte) { func (s *websocketServer) onBotPushEvent(m coolq.MSG) { s.eventConnMutex.Lock() defer s.eventConnMutex.Unlock() - for i, l := 0, len(s.eventConn); i= l { - next = l -1 + 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:]...)