From 73cdafb1ca61bc2d1786a8f9e335833429102ef9 Mon Sep 17 00:00:00 2001
From: Garet Halliday <me@garet.holiday>
Date: Wed, 17 May 2023 18:04:18 -0500
Subject: [PATCH] fix alloc in eqp.Server.Bind

---
 lib/middleware/middlewares/eqp/server.go | 10 ++++++----
 lib/zap/buf.go                           | 15 +++++++++------
 2 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/lib/middleware/middlewares/eqp/server.go b/lib/middleware/middlewares/eqp/server.go
index 339f5a8d..9dc67d56 100644
--- a/lib/middleware/middlewares/eqp/server.go
+++ b/lib/middleware/middlewares/eqp/server.go
@@ -119,8 +119,9 @@ func (T *Server) bindPreparedStatement(
 		return err
 	}
 
-	buf := zap.MakeBuf(preparedStatement.raw)
-	err = ctx.Send(buf.Out())
+	old := T.buf.Swap(preparedStatement.raw)
+	err = ctx.Send(T.buf.Out())
+	T.buf.Swap(old)
 	if err != nil {
 		return err
 	}
@@ -148,8 +149,9 @@ func (T *Server) bindPortal(
 		return err
 	}
 
-	buf := zap.MakeBuf(portal.raw)
-	err = ctx.Send(buf.Out())
+	old := T.buf.Swap(portal.raw)
+	err = ctx.Send(T.buf.Out())
+	T.buf.Swap(old)
 	if err != nil {
 		return err
 	}
diff --git a/lib/zap/buf.go b/lib/zap/buf.go
index 4d02f4af..38646535 100644
--- a/lib/zap/buf.go
+++ b/lib/zap/buf.go
@@ -18,12 +18,6 @@ type Buf struct {
 	rev int
 }
 
-func MakeBuf(buf []byte) Buf {
-	return Buf{
-		buf: buf,
-	}
-}
-
 func (T *Buf) assertRev(rev int) {
 	// this check can be turned off when in production mode (for dev, this is helpful though)
 	if T.rev != rev {
@@ -127,6 +121,15 @@ func (T *Buf) Write() Out {
 	return T.Out()
 }
 
+func (T *Buf) Swap(buf []byte) []byte {
+	T.pos = 0
+	T.rev++
+
+	v := T.buf
+	T.buf = buf
+	return v
+}
+
 func (T *Buf) Done() {
 	T.rev++
 	T.pos = 0
-- 
GitLab