Skip to content

Commit

Permalink
reverseproxy: use context.WithoutCancel (#6116)
Browse files Browse the repository at this point in the history
  • Loading branch information
WeidiDeng committed Feb 20, 2024
1 parent b893c8c commit 53f7035
Showing 1 changed file with 1 addition and 27 deletions.
28 changes: 1 addition & 27 deletions modules/caddyhttp/reverseproxy/reverseproxy.go
Original file line number Diff line number Diff line change
Expand Up @@ -783,7 +783,7 @@ func (h *Handler) reverseProxy(rw http.ResponseWriter, req *http.Request, origRe
// regardless, and we should expect client disconnection in low-latency streaming
// scenarios (see issue #4922)
if h.FlushInterval == -1 {
req = req.WithContext(ignoreClientGoneContext{req.Context()})
req = req.WithContext(context.WithoutCancel(req.Context()))
}

// do the round-trip; emit debug log with values we know are
Expand Down Expand Up @@ -1419,32 +1419,6 @@ type handleResponseContext struct {
isFinalized bool
}

// ignoreClientGoneContext is a special context.Context type
// intended for use when doing a RoundTrip where you don't
// want a client disconnection to cancel the request during
// the roundtrip.
// This context clears cancellation, error, and deadline methods,
// but still allows values to pass through from its embedded
// context.
//
// TODO: This can be replaced with context.WithoutCancel once
// the minimum required version of Go is 1.21.
type ignoreClientGoneContext struct {
context.Context
}

func (c ignoreClientGoneContext) Deadline() (deadline time.Time, ok bool) {
return
}

func (c ignoreClientGoneContext) Done() <-chan struct{} {
return nil
}

func (c ignoreClientGoneContext) Err() error {
return nil
}

// proxyHandleResponseContextCtxKey is the context key for the active proxy handler
// so that handle_response routes can inherit some config options
// from the proxy handler.
Expand Down

0 comments on commit 53f7035

Please sign in to comment.