From c565ca217e71cd86a487b096e90ac39216e5d2bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Pa=C3=9F?= <22845248+mpass99@users.noreply.github.com> Date: Sat, 11 Dec 2021 21:30:39 +0100 Subject: [PATCH] Fix goroutine leak when reading the client WebSocket --- internal/api/websocket.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/internal/api/websocket.go b/internal/api/websocket.go index ca1bfaa..777a9a0 100644 --- a/internal/api/websocket.go +++ b/internal/api/websocket.go @@ -61,14 +61,20 @@ func newCodeOceanToRawReader(connection webSocketConnection) *codeOceanToRawRead // CloseHandler. func (cr *codeOceanToRawReader) readInputLoop(ctx context.Context) { readMessage := make(chan bool) - for { + readingContext, cancel := context.WithCancel(ctx) + defer cancel() + + for ctx.Err() == nil { var messageType int var reader io.Reader var err error go func() { messageType, reader, err = cr.connection.NextReader() - readMessage <- true + select { + case <-readingContext.Done(): + case readMessage <- true: + } }() select { case <-ctx.Done():