Skip to content

Commit 63a863e

Browse files
committed
nits ctx
1 parent 57b873f commit 63a863e

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

utils/httpUtils.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package httpUtils
22

33
import (
44
"context"
5+
"io"
56
"log"
67
"net/http"
78
"net/http/httputil"
@@ -26,6 +27,17 @@ var httpClient = &http.Client{
2627
}
2728

2829
var proxyCache = sync.Map{} // map[string]*httputil.ReverseProxy
30+
31+
type cancelOnCloseReadCloser struct {
32+
io.ReadCloser
33+
cancel context.CancelFunc
34+
}
35+
36+
func (c *cancelOnCloseReadCloser) Close() error {
37+
err := c.ReadCloser.Close()
38+
c.cancel()
39+
return err
40+
}
2941
func getProxy(target *url.URL) *httputil.ReverseProxy {
3042
key := target.Host
3143
if p, ok := proxyCache.Load(key); ok {
@@ -66,10 +78,10 @@ func FowardRequest(w http.ResponseWriter, r *http.Request, destination string) {
6678

6779
func CheckRequest(r *http.Request, node string) (*http.Response, error) {
6880
ctx, cancel := context.WithTimeout(r.Context(), 5*time.Second)
69-
defer cancel()
7081

7182
new_target, err := url.Parse(node)
7283
if err != nil {
84+
cancel()
7385
return nil, err
7486
}
7587

@@ -78,14 +90,17 @@ func CheckRequest(r *http.Request, node string) (*http.Response, error) {
7890

7991
req, err := http.NewRequestWithContext(ctx, r.Method, new_target.String(), r.Body)
8092
if err != nil {
93+
cancel()
8194
return nil, err
8295
}
8396

8497
req.Header = r.Header.Clone()
8598

8699
res, err := httpClient.Do(req)
87100
if err != nil {
101+
cancel()
88102
return nil, err
89103
}
104+
res.Body = &cancelOnCloseReadCloser{ReadCloser: res.Body, cancel: cancel}
90105
return res, nil
91106
}

0 commit comments

Comments
 (0)