diff --git a/lib/gat/gatling/client/client.go b/lib/gat/gatling/client/client.go index a7b85b8810992e4248cd3f9d9c708ea65d69d449..95e5d5dad8e683e101b96f3c9b6d2de1f805efd2 100644 --- a/lib/gat/gatling/client/client.go +++ b/lib/gat/gatling/client/client.go @@ -464,6 +464,17 @@ func (c *Client) recvLoop(cancel context.CancelFunc) { break } case *protocol.Close: + switch pkt.Fields.Which { + case 'S': + delete(c.statements, pkt.Fields.Name) + case 'P': + delete(c.portals, pkt.Fields.Name) + } + err = c.Send(new(protocol.CloseComplete)) + if err != nil { + break + } + case *protocol.Terminate: break default: c.recv <- recv @@ -505,8 +516,6 @@ func (c *Client) tick(ctx context.Context) (bool, error) { return true, c.handle_query(ctx, cast) case *protocol.FunctionCall: return true, c.handle_function(ctx, cast) - case *protocol.Terminate: - return false, nil default: log.Printf("unhandled packet %#v", rsp) } diff --git a/lib/gat/gatling/server/server.go b/lib/gat/gatling/server/server.go index 2883a14127ec02cc9fc206d9794c6f0b86997c20..060bf5fdf957377e53b644cd4c5df812eb1567dd 100644 --- a/lib/gat/gatling/server/server.go +++ b/lib/gat/gatling/server/server.go @@ -507,9 +507,10 @@ func (s *Server) destructPreparedStatement(name string) { return } delete(s.boundPreparedStatments, name) - query := new(protocol.Query) - query.Fields.Query = fmt.Sprintf("DEALLOCATE \"%s\"", name) - _ = s.writePacket(query) + closeRequest := new(protocol.Close) + closeRequest.Fields.Which = 'S' + closeRequest.Fields.Name = name + _ = s.writePacket(closeRequest) _ = s.flush() // await server ready for { @@ -749,7 +750,7 @@ func (s *Server) Close() error { default: s.readyForQuery = false close(s.closed) - _ = s.writePacket(&protocol.Close{}) + _ = s.writePacket(&protocol.Terminate{}) return s.conn.Close() } }