File tree Expand file tree Collapse file tree 1 file changed +13
-1
lines changed Expand file tree Collapse file tree 1 file changed +13
-1
lines changed Original file line number Diff line number Diff line change @@ -115,6 +115,9 @@ type Conn struct {
115
115
// in Conn.Write.
116
116
activeCall int32
117
117
118
+ // tmpReader avoids allocations of atLeastReader for Conn.Read
119
+ tmpReader atLeastReader
120
+
118
121
tmp [16 ]byte
119
122
}
120
123
@@ -793,6 +796,11 @@ func (r *atLeastReader) Read(p []byte) (int, error) {
793
796
return n , err
794
797
}
795
798
799
+ // release an underlying reader to be GCed
800
+ func (r * atLeastReader ) release () {
801
+ r .R = nil
802
+ }
803
+
796
804
// readFromUntil reads from r into c.rawInput until c.rawInput contains
797
805
// at least n bytes or else returns an error.
798
806
func (c * Conn ) readFromUntil (r io.Reader , n int ) error {
@@ -804,7 +812,11 @@ func (c *Conn) readFromUntil(r io.Reader, n int) error {
804
812
// attempt to fetch it so that it can be used in (*Conn).Read to
805
813
// "predict" closeNotify alerts.
806
814
c .rawInput .Grow (needs + bytes .MinRead )
807
- _ , err := c .rawInput .ReadFrom (& atLeastReader {r , int64 (needs )})
815
+
816
+ c .tmpReader = atLeastReader {r , int64 (needs )}
817
+ defer c .tmpReader .release ()
818
+
819
+ _ , err := c .rawInput .ReadFrom (& c .tmpReader )
808
820
return err
809
821
}
810
822
You can’t perform that action at this time.
0 commit comments