From 1b17e4607dd159e634243d44d2d2fc832d390372 Mon Sep 17 00:00:00 2001 From: Henry Robinson Date: Fri, 15 Jul 2022 10:49:24 -0700 Subject: [PATCH] Test: recycle server reader buffers Signed-off-by: Henry Robinson --- go/mysql/conn.go | 11 ++++++++++- go/mysql/server.go | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/go/mysql/conn.go b/go/mysql/conn.go index edb1201afe3..63eb0279349 100644 --- a/go/mysql/conn.go +++ b/go/mysql/conn.go @@ -228,6 +228,8 @@ func newConn(conn net.Conn) *Conn { } } +var readersPool = sync.Pool{New: func() interface{} { return bufio.NewReaderSize(nil, 16*1024) }} + // newServerConn should be used to create server connections. // // It stashes a reference to the listener to be able to determine if @@ -241,11 +243,18 @@ func newServerConn(conn net.Conn, listener *Listener) *Conn { PrepareData: make(map[uint32]*PrepareData), } if listener.connReadBufferSize > 0 { - c.bufferedReader = bufio.NewReaderSize(conn, listener.connReadBufferSize) + buf := readersPool.Get().(*bufio.Reader) + buf.Reset(conn) + c.bufferedReader = buf } return c } +func (c *Conn) returnReader() { + c.bufferedReader.Reset(nil) + readersPool.Put(c.bufferedReader) +} + // startWriterBuffering starts using buffered writes. This should // be terminated by a call to endWriteBuffering. func (c *Conn) startWriterBuffering() { diff --git a/go/mysql/server.go b/go/mysql/server.go index e6de1925974..6dd9b9f6d0d 100644 --- a/go/mysql/server.go +++ b/go/mysql/server.go @@ -306,6 +306,8 @@ func (l *Listener) handle(conn net.Conn, connectionID uint32, acceptTime time.Ti // startWriterBuffering is called c.endWriterBuffering() + c.returnReader() + conn.Close() }()