@@ -57,6 +57,9 @@ type Conn struct {
5757
5858 activePingsMu sync.Mutex
5959 activePings map [string ]chan <- struct {}
60+
61+ headerBuf []byte
62+ controlPayloadBuf []byte
6063}
6164
6265func (c * Conn ) init () {
@@ -74,6 +77,9 @@ func (c *Conn) init() {
7477
7578 c .activePings = make (map [string ]chan <- struct {})
7679
80+ c .headerBuf = makeHeaderBuf ()
81+ c .controlPayloadBuf = make ([]byte , maxControlFramePayload )
82+
7783 runtime .SetFinalizer (c , func (c * Conn ) {
7884 c .close (xerrors .New ("connection garbage collected" ))
7985 })
@@ -209,7 +215,7 @@ func (c *Conn) readFrameHeader(ctx context.Context) (header, error) {
209215 case c .setReadTimeout <- ctx :
210216 }
211217
212- h , err := readHeader (c .br )
218+ h , err := readHeader (c .headerBuf , c . br )
213219 if err != nil {
214220 select {
215221 case <- c .closed :
@@ -249,8 +255,7 @@ func (c *Conn) handleControl(ctx context.Context, h header) error {
249255 ctx , cancel := context .WithTimeout (ctx , time .Second * 5 )
250256 defer cancel ()
251257
252- b := make ([]byte , h .payloadLength )
253-
258+ b := c .controlPayloadBuf [:h .payloadLength ]
254259 _ , err := c .readFramePayload (ctx , b )
255260 if err != nil {
256261 return err
0 commit comments