From 9b762a19f28ca1880c78c0d48b2c2588bc2a2a1d Mon Sep 17 00:00:00 2001
From: Garet Halliday <me@garet.holiday>
Date: Mon, 18 Sep 2023 19:28:22 -0500
Subject: [PATCH] oh wow it actually works

---
 lib/gat/pool/flow.go                  | 12 +++++++++---
 lib/middleware/middlewares/ps/sync.go |  8 ++++++--
 test/capturer.go                      |  2 +-
 3 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/lib/gat/pool/flow.go b/lib/gat/pool/flow.go
index 3a1c453f..4a1df190 100644
--- a/lib/gat/pool/flow.go
+++ b/lib/gat/pool/flow.go
@@ -2,6 +2,7 @@ package pool
 
 import (
 	"pggat/lib/bouncer/backends/v0"
+	"pggat/lib/fed"
 	packets "pggat/lib/fed/packets/v3.0"
 	"pggat/lib/gat/metrics"
 	"pggat/lib/middleware/middlewares/eqp"
@@ -42,6 +43,8 @@ func SyncInitialParameters(options Options, client *Client, server *Server) (cli
 	clientParams := client.GetInitialParameters()
 	serverParams := server.GetInitialParameters()
 
+	var packet fed.Packet
+
 	for key, value := range clientParams {
 		// skip already set params
 		if serverParams[key] == value {
@@ -49,7 +52,8 @@ func SyncInitialParameters(options Options, client *Client, server *Server) (cli
 				Key:   key.String(),
 				Value: serverParams[key],
 			}
-			clientErr = client.GetConn().WritePacket(p.IntoPacket(nil))
+			packet = p.IntoPacket(packet)
+			clientErr = client.GetConn().WritePacket(packet)
 			if clientErr != nil {
 				return
 			}
@@ -66,7 +70,8 @@ func SyncInitialParameters(options Options, client *Client, server *Server) (cli
 			Key:   key.String(),
 			Value: value,
 		}
-		clientErr = client.GetConn().WritePacket(p.IntoPacket(nil))
+		packet = p.IntoPacket(packet)
+		clientErr = client.GetConn().WritePacket(packet)
 		if clientErr != nil {
 			return
 		}
@@ -96,7 +101,8 @@ func SyncInitialParameters(options Options, client *Client, server *Server) (cli
 			Key:   key.String(),
 			Value: value,
 		}
-		clientErr = client.GetConn().WritePacket(p.IntoPacket(nil))
+		packet = p.IntoPacket(packet)
+		clientErr = client.GetConn().WritePacket(packet)
 		if clientErr != nil {
 			return
 		}
diff --git a/lib/middleware/middlewares/ps/sync.go b/lib/middleware/middlewares/ps/sync.go
index 0b73eb7e..8aea27f8 100644
--- a/lib/middleware/middlewares/ps/sync.go
+++ b/lib/middleware/middlewares/ps/sync.go
@@ -12,13 +12,16 @@ func sync(tracking []strutil.CIString, client fed.ReadWriter, c *Client, server
 	value, hasValue := c.parameters[name]
 	expected, hasExpected := s.parameters[name]
 
+	var packet fed.Packet
+
 	if value == expected {
 		if !c.synced {
 			ps := packets.ParameterStatus{
 				Key:   name.String(),
 				Value: expected,
 			}
-			if err := client.WritePacket(ps.IntoPacket(nil)); err != nil {
+			packet = ps.IntoPacket(packet)
+			if err := client.WritePacket(packet); err != nil {
 				return err
 			}
 		}
@@ -49,7 +52,8 @@ func sync(tracking []strutil.CIString, client fed.ReadWriter, c *Client, server
 			Key:   name.String(),
 			Value: expected,
 		}
-		if err := client.WritePacket(ps.IntoPacket(nil)); err != nil {
+		packet = ps.IntoPacket(packet)
+		if err := client.WritePacket(packet); err != nil {
 			return err
 		}
 	}
diff --git a/test/capturer.go b/test/capturer.go
index cc301226..c319ed27 100644
--- a/test/capturer.go
+++ b/test/capturer.go
@@ -13,7 +13,7 @@ type Capturer struct {
 }
 
 func (T *Capturer) WritePacket(packet fed.Packet) error {
-	T.Packets = append(T.Packets, packet)
+	T.Packets = append(T.Packets, bytes.Clone(packet))
 	return nil
 }
 
-- 
GitLab