~bigbes/core-go

209e1a86985183fbd680f052f4db8a49efea2120 — Simon Ser 3 years ago 1f6fac1
database/middleware: do not recover/panic in defer

defer always runs after a panic. There is no need to recover and
re-panic, we can just unconditionally tx.Rollback() (it will
silently error out if the transaction has already been committed or
rolled back).

This fixes the stack trace of the panic being incorrect. It points
to this function instead of the real culprit.
1 files changed, 1 insertions(+), 6 deletions(-)

M database/middleware.go
M database/middleware.go => database/middleware.go +1 -6
@@ 53,12 53,7 @@ func WithTx(ctx context.Context, opts *sql.TxOptions, fn func(tx *sql.Tx) error)
	if err != nil {
		return err
	}
	defer func() {
		if r := recover(); r != nil {
			tx.Rollback()
			panic(r)
		}
	}()
	defer tx.Rollback()
	err = fn(tx)
	if err != nil {
		err := tx.Rollback()