fix: websockets goroutine leak for object list UI (#2805)

listen on the done channel to ensure that we can clean up 
the WebSocket go-routine, once the caller is done with
writing the response.
This commit is contained in:
jiuker
2023-07-06 03:17:54 +08:00
committed by GitHub
parent b71d9f05c5
commit 1eba59954d

View File

@@ -232,18 +232,23 @@ func (wsc *wsMinioClient) objectManager(session *models.Principal) {
// Write goroutine
go func() {
for writeM := range writeChannel {
jsonData, err := json.Marshal(writeM)
if err != nil {
LogInfo("Error while parsing the response", err)
for {
select {
case <-done:
return
}
case writeM := <-writeChannel:
jsonData, err := json.Marshal(writeM)
if err != nil {
LogInfo("Error while marshaling the response", err)
return
}
err = wsc.conn.writeMessage(websocket.TextMessage, jsonData)
err = wsc.conn.writeMessage(websocket.TextMessage, jsonData)
if err != nil {
LogInfo("Error while writing the message", err)
return
if err != nil {
LogInfo("Error while writing the message", err)
return
}
}
}
}()