From dcd930b5389635bbb3ca536235c9c81c58f94fb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leo=20Sjo=CC=88berg?= Date: Wed, 28 Aug 2024 12:08:13 +0100 Subject: [PATCH] Generate unique savepoint names --- finisher_api.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/finisher_api.go b/finisher_api.go index f97571ed..6802945c 100644 --- a/finisher_api.go +++ b/finisher_api.go @@ -4,6 +4,7 @@ import ( "database/sql" "errors" "fmt" + "hash/maphash" "reflect" "strings" @@ -623,14 +624,15 @@ func (db *DB) Transaction(fc func(tx *DB) error, opts ...*sql.TxOptions) (err er if committer, ok := db.Statement.ConnPool.(TxCommitter); ok && committer != nil { // nested transaction if !db.DisableNestedTransaction { - err = db.SavePoint(fmt.Sprintf("sp%p", fc)).Error + spID := new(maphash.Hash).Sum64() + err = db.SavePoint(fmt.Sprintf("sp%d", spID)).Error if err != nil { return } defer func() { // Make sure to rollback when panic, Block error or Commit error if panicked || err != nil { - db.RollbackTo(fmt.Sprintf("sp%p", fc)) + db.RollbackTo(fmt.Sprintf("sp%d", spID)) } }() }