From 2583134306da7d77427188acc1163aa636e28904 Mon Sep 17 00:00:00 2001 From: Jack Christensen Date: Mon, 13 Jul 2020 22:40:42 -0500 Subject: [PATCH] stdlib: close connection on Tx commit or rollback that doesn't end Tx refs #787 --- stdlib/sql.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/stdlib/sql.go b/stdlib/sql.go index a45750ac..119ce00c 100644 --- a/stdlib/sql.go +++ b/stdlib/sql.go @@ -716,9 +716,23 @@ type wrapTx struct { tx pgx.Tx } -func (wtx wrapTx) Commit() error { return wtx.tx.Commit(wtx.ctx) } +func (wtx wrapTx) Commit() error { + pgxConn := wtx.tx.Conn() + err := wtx.tx.Commit(wtx.ctx) + if err != nil && pgxConn.PgConn().TxStatus() != 'I' { + _ = pgxConn.Close(wtx.ctx) // already have error to return + } + return err +} -func (wtx wrapTx) Rollback() error { return wtx.tx.Rollback(wtx.ctx) } +func (wtx wrapTx) Rollback() error { + pgxConn := wtx.tx.Conn() + err := wtx.tx.Rollback(wtx.ctx) + if err != nil && pgxConn.PgConn().TxStatus() != 'I' { + _ = pgxConn.Close(wtx.ctx) // already have error to return + } + return err +} type fakeTx struct{}