1
0
mirror of https://github.com/amir20/dozzle.git synced 2025-12-21 21:33:18 +01:00

Fixes memory leaks

This commit is contained in:
Amir Raminfar
2018-11-27 11:13:02 -08:00
parent 537f7c0a01
commit 93cfd0e597
2 changed files with 38 additions and 22 deletions

1
.gitignore vendored
View File

@@ -5,3 +5,4 @@ node_modules
static
a_main-packr.go
dozzle
gin-bin

27
main.go
View File

@@ -122,6 +122,10 @@ func streamLogs(w http.ResponseWriter, r *http.Request) {
return
}
defer reader.Close()
go func() {
<-r.Context().Done()
reader.Close()
}()
w.Header().Set("Content-Type", "text/event-stream")
w.Header().Set("Cache-Control", "no-cache")
@@ -133,17 +137,15 @@ func streamLogs(w http.ResponseWriter, r *http.Request) {
for {
_, err := reader.Read(hdr)
if err != nil {
log.Panicln(err)
break
}
count := binary.BigEndian.Uint32(hdr[4:])
n, err := reader.Read(content[:count])
if err != nil {
log.Println(err)
break
}
_, err = fmt.Fprintf(w, "data: %s\n\n", content[:n])
if err != nil {
log.Println(err)
break
}
f.Flush()
@@ -166,7 +168,14 @@ func streamEvents(w http.ResponseWriter, r *http.Request) {
defer cancel()
messages, _ := dockerClient.Events(ctx)
for message := range messages {
for {
exit := false
select {
case message, closed := <-messages:
if closed {
log.Println("Breaking from messages")
exit = true
}
switch message.Action {
case "connect":
fallthrough
@@ -183,8 +192,14 @@ func streamEvents(w http.ResponseWriter, r *http.Request) {
break
}
f.Flush()
default:
// Do nothing
}
case <-r.Context().Done():
cancel()
exit = true
}
if exit {
break
}
}
}