From 5be9bd34135805e0332b993378864b159784d8a8 Mon Sep 17 00:00:00 2001 From: ch3rub1m Date: Fri, 14 Sep 2018 15:53:49 +0800 Subject: [PATCH] Rollback transaction when a panic happens in callback (#2093) --- scope.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/scope.go b/scope.go index fa521ca2..378025bd 100644 --- a/scope.go +++ b/scope.go @@ -855,6 +855,14 @@ func (scope *Scope) inlineCondition(values ...interface{}) *Scope { } func (scope *Scope) callCallbacks(funcs []*func(s *Scope)) *Scope { + defer func() { + if err := recover(); err != nil { + if db, ok := scope.db.db.(sqlTx); ok { + db.Rollback() + } + panic(err) + } + }() for _, f := range funcs { (*f)(scope) if scope.skipLeft {