Ignore errors sending Terminate message while closing connection

This mimics the behavior of libpq PGfinish.

refs #637
This commit is contained in:
Jack Christensen 2019-11-18 07:24:05 -06:00
parent 9449f4b081
commit eb81d2926b

View File

@ -492,15 +492,13 @@ func (pgConn *PgConn) Close(ctx context.Context) error {
pgConn.contextWatcher.Watch(ctx)
defer pgConn.contextWatcher.Unwatch()
_, err := pgConn.conn.Write([]byte{'X', 0, 0, 0, 4})
if err != nil {
return err
}
_, err = pgConn.conn.Read(make([]byte, 1))
if err != io.EOF {
return err
}
// Ignore any errors sending Terminate message and waiting for server to close connection.
// This mimics the behavior of libpq PQfinish. It calls closePGconn which calls sendTerminateConn which purposefully
// ignores errors.
//
// See https://github.com/jackc/pgx/issues/637
pgConn.conn.Write([]byte{'X', 0, 0, 0, 4})
pgConn.conn.Read(make([]byte, 1))
return pgConn.conn.Close()
}