From 9416a681c09d81bd8a62c51dfef6373a5c92ef68 Mon Sep 17 00:00:00 2001 From: Raul Jordan <raul@prysmaticlabs.com> Date: Thu, 17 Sep 2020 14:15:43 -0500 Subject: [PATCH] socket improvements --- shared/logutil/stream.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/shared/logutil/stream.go b/shared/logutil/stream.go index 2dd0ce40ba16..3054477533e1 100644 --- a/shared/logutil/stream.go +++ b/shared/logutil/stream.go @@ -42,8 +42,14 @@ func (ss *StreamServer) Handler(w http.ResponseWriter, r *http.Request) { log.Errorf("Could not write websocket message: %v", err) return } + defer func() { + if err := conn.Close(); err != nil { + log.Errorf("Could not close websocket connection: %v", err) + } + }() - ch := make(chan []byte) + ch := make(chan []byte, 1) + defer close(ch) sub := ss.feed.Subscribe(ch) defer sub.Unsubscribe() @@ -52,14 +58,17 @@ func (ss *StreamServer) Handler(w http.ResponseWriter, r *http.Request) { case evt := <-ch: if err := conn.WriteMessage(websocket.TextMessage, evt); err != nil { log.Errorf("Could not write websocket message: %v", err) + return } case <-r.Context().Done(): if err := conn.WriteMessage(websocket.CloseNormalClosure, []byte("context canceled")); err != nil { log.Error(err) + return } case err := <-sub.Err(): if err := conn.WriteMessage(websocket.CloseInternalServerErr, []byte(err.Error())); err != nil { log.Error(err) + return } } }