From 705904312904874575289f2b7cdf915c6137e68f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel=20Ortu=C3=B1o?= Date: Tue, 13 Sep 2022 12:19:04 +0200 Subject: [PATCH] transport: limit writer buffer size (#251) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Miguel Ángel Ortuño --- CHANGELOG.md | 1 + pkg/transport/socket.go | 12 +++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f6f213d3c..6320bbf32 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ * [ENHANCEMENT] Re-enable TLS 1.3 channel binding during auth using [RFC 9266](https://www.rfc-editor.org/rfc/rfc9266). * [ENHANCEMENT] hook: include propagated context into execution parameter. [249](https://github.com/ortuman/jackal/pull/249) +* [ENHANCEMENT] transport: limit writer buffer size [#251](https://github.com/ortuman/jackal/pull/251) ## 0.61.0 (2022/06/06) diff --git a/pkg/transport/socket.go b/pkg/transport/socket.go index 7804b68cf..3e0ed3bd5 100644 --- a/pkg/transport/socket.go +++ b/pkg/transport/socket.go @@ -30,13 +30,17 @@ import ( "golang.org/x/time/rate" ) -const readBufferSize = 4096 +const ( + readBufferSize = 4096 + + maxWriteBufferSize = 256 * 1024 +) var errNoWriteFlush = errors.New("transport: flushing buffer before writing") var bufWriterPool = sync.Pool{ New: func() interface{} { - return bufio.NewWriter(nil) + return bufio.NewWriterSize(nil, maxWriteBufferSize) }, } @@ -213,6 +217,8 @@ func (s *socketTransport) releaseBuffWriter() { if s.bw == nil { return } - bufWriterPool.Put(s.bw) + if s.bw.Size() <= maxWriteBufferSize { + bufWriterPool.Put(s.bw) + } s.bw = nil }