Merge pull request #712 from lbcjbb/master

[pgxpool] Fix connection leak if BeginTx() fail
pull/715/head
Jack Christensen 2020-04-07 19:52:40 -05:00 committed by GitHub
commit 7a9efdefde
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 0 deletions

View File

@ -429,6 +429,7 @@ func (p *Pool) BeginTx(ctx context.Context, txOptions pgx.TxOptions) (pgx.Tx, er
t, err := c.BeginTx(ctx, txOptions)
if err != nil {
c.Release()
return nil, err
}

View File

@ -555,3 +555,26 @@ func TestConnPoolQueryConcurrentLoad(t *testing.T) {
<-done
}
}
func TestConnReleaseWhenBeginFail(t *testing.T) {
t.Parallel()
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
db, err := pgxpool.Connect(ctx, os.Getenv("PGX_TEST_DATABASE"))
require.NoError(t, err)
defer db.Close()
tx, err := db.BeginTx(ctx, pgx.TxOptions{
IsoLevel: pgx.TxIsoLevel("foo"),
})
assert.Error(t, err)
if !assert.Zero(t, tx) {
err := tx.Rollback(ctx)
assert.NoError(t, err)
}
stats := db.Stat()
assert.EqualValues(t, 0, stats.TotalConns())
}