From 209e1a86985183fbd680f052f4db8a49efea2120 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Fri, 24 Mar 2023 12:05:58 +0000 Subject: [PATCH] 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. --- database/middleware.go | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/database/middleware.go b/database/middleware.go index 0bdc7de93209cbb6a1beb6e2cf42238a79e4e851..364a9554c7da8b676ce86e885370fd2a86f00ae5 100644 --- a/database/middleware.go +++ b/database/middleware.go @@ -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()