diff --git a/lib/middleware/middlewares/eqp/server.go b/lib/middleware/middlewares/eqp/server.go index 339f5a8d5ec04302d73cd18e69c7aaad28e3f3fb..9dc67d56c52020475714c1e05b30af97dbf45862 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 4d02f4af8541d30dd4ca22e0a874597a1e040c62..38646535a58962a000703da9295b54c956bfca17 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