diff --git a/lib/gat/pool/pool.go b/lib/gat/pool/pool.go
index d55012aea01987356d88dd5394edacd894de336d..1995ee71bd7b1b4b4d5d81577271defb1fc5b660 100644
--- a/lib/gat/pool/pool.go
+++ b/lib/gat/pool/pool.go
@@ -338,7 +338,9 @@ func (T *Pool) serve(client *pooledClient, initialized bool) error {
 
 	packet, _ := ppool.Get()
 	defer func() {
-		ppool.Put(packet)
+		if len(packet) <= maxPacketBufferSize {
+			ppool.Put(packet)
+		}
 	}()
 
 	if !initialized {
@@ -370,6 +372,10 @@ func (T *Pool) serve(client *pooledClient, initialized bool) error {
 			server = nil
 		}
 
+		if len(packet) > maxPacketBufferSize {
+			packet = make(fed.Packet, 0, maxPacketBufferSize)
+		}
+
 		packet, err = client.GetConn().ReadPacket(true, packet)
 		if err != nil {
 			return err
@@ -387,10 +393,6 @@ func (T *Pool) serve(client *pooledClient, initialized bool) error {
 			packet, err, serverErr = bouncers.Bounce(client.GetConn(), server.GetConn(), packet)
 		}
 
-		if len(packet) > maxPacketBufferSize {
-			packet = make(fed.Packet, 0, maxPacketBufferSize)
-		}
-
 		if serverErr != nil {
 			return serverErr
 		} else {