From da2fe0e3b0035bacbc491f96eeb8b1fbb849e4f1 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 15 Jan 2020 04:52:34 -0800 Subject: [PATCH] walletdb: ensure transactions are rolled back on panic --- walletdb/interface.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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() }