Close stream on panic (#13605)

Always close streamHTTPResponse on panic on main thread to avoid 
write/flush after response handler has returned.
This commit is contained in:
Klaus Post
2021-11-08 08:41:27 -08:00
committed by GitHub
parent 9afdbe3648
commit 4f3317effe
2 changed files with 15 additions and 0 deletions

View File

@@ -30,6 +30,7 @@ import (
"net/http"
"os/user"
"path"
"runtime/debug"
"strconv"
"strings"
"sync"
@@ -177,6 +178,12 @@ func (s *storageRESTServer) NSScannerHandler(w http.ResponseWriter, r *http.Requ
ctx, cancel := context.WithCancel(r.Context())
defer cancel()
resp := streamHTTPResponse(w)
defer func() {
if r := recover(); r != nil {
debug.PrintStack()
resp.CloseWithError(fmt.Errorf("panic: %v", r))
}
}()
respW := msgp.NewWriter(resp)
// Collect updates, stream them before the full cache is sent.