Skip to content

Commit 34e7da1

Browse files
authoredSep 2, 2023
Allow connection close for custom streams (#1603)
* feat: allow connection close for custom streams * fix: avoid req access since might already be released * fix: fix aloc test fails * fix: race condition when clossing body stream
1 parent 8236f8d commit 34e7da1

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed
 

‎client.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -2894,8 +2894,8 @@ func (t *transport) RoundTrip(hc *HostClient, req *Request, resp *Response) (ret
28942894

28952895
br := hc.acquireReader(conn)
28962896
err = resp.ReadLimitBody(br, hc.MaxResponseBodySize)
2897-
hc.releaseReader(br)
28982897
if err != nil {
2898+
hc.releaseReader(br)
28992899
hc.closeConn(cc)
29002900
// Don't retry in case of ErrBodyTooLarge since we will just get the same again.
29012901
needRetry := err != ErrBodyTooLarge
@@ -2906,17 +2906,20 @@ func (t *transport) RoundTrip(hc *HostClient, req *Request, resp *Response) (ret
29062906
if customStreamBody && resp.bodyStream != nil {
29072907
rbs := resp.bodyStream
29082908
resp.bodyStream = newCloseReader(rbs, func() error {
2909+
hc.releaseReader(br)
29092910
if r, ok := rbs.(*requestStream); ok {
29102911
releaseRequestStream(r)
29112912
}
2912-
if closeConn {
2913+
if closeConn || resp.ConnectionClose() {
29132914
hc.closeConn(cc)
29142915
} else {
29152916
hc.releaseConn(cc)
29162917
}
29172918
return nil
29182919
})
29192920
return false, nil
2921+
} else {
2922+
hc.releaseReader(br)
29202923
}
29212924

29222925
if closeConn {

‎http.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1108,8 +1108,8 @@ func (resp *Response) Reset() {
11081108
if responseBodyPoolSizeLimit >= 0 && resp.body != nil {
11091109
resp.ReleaseBody(responseBodyPoolSizeLimit)
11101110
}
1111-
resp.Header.Reset()
11121111
resp.resetSkipHeader()
1112+
resp.Header.Reset()
11131113
resp.SkipBody = false
11141114
resp.raddr = nil
11151115
resp.laddr = nil

0 commit comments

Comments
 (0)
Please sign in to comment.