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

@@ -19,9 +19,11 @@ package cmd
import (
"context"
"fmt"
"io"
"net/http"
"net/url"
"runtime/debug"
"sort"
"strconv"
"strings"
@@ -357,6 +359,12 @@ func (s *storageRESTServer) WalkDirHandler(w http.ResponseWriter, r *http.Reques
prefix := r.Form.Get(storageRESTPrefixFilter)
forward := r.Form.Get(storageRESTForwardFilter)
writer := streamHTTPResponse(w)
defer func() {
if r := recover(); r != nil {
debug.PrintStack()
writer.CloseWithError(fmt.Errorf("panic: %v", r))
}
}()
writer.CloseWithError(s.storage.WalkDir(r.Context(), WalkDirOptions{
Bucket: volume,
BaseDir: dirPath,