diff --git a/walletdb/interface.go b/walletdb/interface.go index f120e71..c6c1f87 100644 --- a/walletdb/interface.go +++ b/walletdb/interface.go @@ -210,11 +210,20 @@ func View(db DB, f func(tx ReadTx) error) error { if err != nil { return err } + + // Make sure the transaction rolls back in the event of a panic. + defer func() { + if tx != nil { + tx.Rollback() + } + }() + err = f(tx) rollbackErr := tx.Rollback() if err != nil { return err } + if rollbackErr != nil { return rollbackErr } @@ -232,6 +241,14 @@ func Update(db DB, f func(tx ReadWriteTx) error) error { if err != nil { return err } + + // Make sure the transaction rolls back in the event of a panic. + defer func() { + if tx != nil { + tx.Rollback() + } + }() + err = f(tx) if err != nil { // Want to return the original error, not a rollback error if @@ -239,6 +256,7 @@ func Update(db DB, f func(tx ReadWriteTx) error) error { _ = tx.Rollback() return err } + return tx.Commit() }