Skip to content

Commit 1eba599

Browse files
authored
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.
1 parent b71d9f0 commit 1eba599

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

restapi/ws_objects.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -232,18 +232,23 @@ func (wsc *wsMinioClient) objectManager(session *models.Principal) {
232232

233233
// Write goroutine
234234
go func() {
235-
for writeM := range writeChannel {
236-
jsonData, err := json.Marshal(writeM)
237-
if err != nil {
238-
LogInfo("Error while parsing the response", err)
235+
for {
236+
select {
237+
case <-done:
239238
return
240-
}
239+
case writeM := <-writeChannel:
240+
jsonData, err := json.Marshal(writeM)
241+
if err != nil {
242+
LogInfo("Error while marshaling the response", err)
243+
return
244+
}
241245

242-
err = wsc.conn.writeMessage(websocket.TextMessage, jsonData)
246+
err = wsc.conn.writeMessage(websocket.TextMessage, jsonData)
243247

244-
if err != nil {
245-
LogInfo("Error while writing the message", err)
246-
return
248+
if err != nil {
249+
LogInfo("Error while writing the message", err)
250+
return
251+
}
247252
}
248253
}
249254
}()

0 commit comments

Comments
 (0)