File tree Expand file tree Collapse file tree 3 files changed +13
-0
lines changed Expand file tree Collapse file tree 3 files changed +13
-0
lines changed Original file line number Diff line number Diff line change @@ -783,6 +783,14 @@ func swapRequestBody(a, b *Request) {
783
783
a .body , b .body = b .body , a .body
784
784
a .bodyRaw , b .bodyRaw = b .bodyRaw , a .bodyRaw
785
785
a .bodyStream , b .bodyStream = b .bodyStream , a .bodyStream
786
+
787
+ // This code assumes that if a requestStream was swapped the headers are also swapped or copied.
788
+ if rs , ok := a .bodyStream .(* requestStream ); ok {
789
+ rs .header = & a .Header
790
+ }
791
+ if rs , ok := b .bodyStream .(* requestStream ); ok {
792
+ rs .header = & b .Header
793
+ }
786
794
}
787
795
788
796
func swapResponseBody (a , b * Response ) {
@@ -1881,6 +1889,9 @@ func (req *Request) closeBodyStream() error {
1881
1889
if bsc , ok := req .bodyStream .(io.Closer ); ok {
1882
1890
err = bsc .Close ()
1883
1891
}
1892
+ if rs , ok := req .bodyStream .(* requestStream ); ok {
1893
+ releaseRequestStream (rs )
1894
+ }
1884
1895
req .bodyStream = nil
1885
1896
return err
1886
1897
}
Original file line number Diff line number Diff line change @@ -2440,6 +2440,7 @@ func (s *Server) serveConn(c net.Conn) (err error) {
2440
2440
if rs , ok := ctx .Request .bodyStream .(* requestStream ); ok {
2441
2441
releaseRequestStream (rs )
2442
2442
}
2443
+ ctx .Request .bodyStream = nil
2443
2444
}
2444
2445
2445
2446
s .setState (c , StateIdle )
Original file line number Diff line number Diff line change @@ -98,6 +98,7 @@ func releaseRequestStream(rs *requestStream) {
98
98
rs .totalBytesRead = 0
99
99
rs .chunkLeft = 0
100
100
rs .reader = nil
101
+ rs .header = nil
101
102
requestStreamPool .Put (rs )
102
103
}
103
104
You can’t perform that action at this time.
0 commit comments