@@ -57,6 +57,9 @@ type Conn struct {
57
57
58
58
activePingsMu sync.Mutex
59
59
activePings map [string ]chan <- struct {}
60
+
61
+ headerBuf []byte
62
+ controlPayloadBuf []byte
60
63
}
61
64
62
65
func (c * Conn ) init () {
@@ -74,6 +77,9 @@ func (c *Conn) init() {
74
77
75
78
c .activePings = make (map [string ]chan <- struct {})
76
79
80
+ c .headerBuf = makeHeaderBuf ()
81
+ c .controlPayloadBuf = make ([]byte , maxControlFramePayload )
82
+
77
83
runtime .SetFinalizer (c , func (c * Conn ) {
78
84
c .close (xerrors .New ("connection garbage collected" ))
79
85
})
@@ -209,7 +215,7 @@ func (c *Conn) readFrameHeader(ctx context.Context) (header, error) {
209
215
case c .setReadTimeout <- ctx :
210
216
}
211
217
212
- h , err := readHeader (c .br )
218
+ h , err := readHeader (c .headerBuf , c . br )
213
219
if err != nil {
214
220
select {
215
221
case <- c .closed :
@@ -249,8 +255,7 @@ func (c *Conn) handleControl(ctx context.Context, h header) error {
249
255
ctx , cancel := context .WithTimeout (ctx , time .Second * 5 )
250
256
defer cancel ()
251
257
252
- b := make ([]byte , h .payloadLength )
253
-
258
+ b := c .controlPayloadBuf [:h .payloadLength ]
254
259
_ , err := c .readFramePayload (ctx , b )
255
260
if err != nil {
256
261
return err
0 commit comments