summaryrefslogtreecommitdiffstats
path: root/models/context.go
diff options
context:
space:
mode:
authorzeripath <art27@cantab.net>2021-09-14 17:16:40 +0100
committerGitHub <noreply@github.com>2021-09-14 18:16:40 +0200
commit26ef180f466046f9cfab87eea5ea93f5d6da6998 (patch)
treee4584497cf8bc64f572dcaa49ff1a4c4cb9bd62d /models/context.go
parent04b233e9408296fa14eb7623b7dbe0d98c1865f1 (diff)
downloadgitea-26ef180f466046f9cfab87eea5ea93f5d6da6998.tar.gz
gitea-26ef180f466046f9cfab87eea5ea93f5d6da6998.zip
Correctly rollback in ForkRepository (#17034)
The rollback functionality in services/repository/repository.go:ForkRepository is incorrect and could lead to a deadlock as it uses DeleteRepository to delete the rolled-back repository - a function which creates its own transaction. This PR adjusts the rollback function to only use RemoveAll as any database changes will be automatically rolled-back. It also handles panics and adjusts the Close within WithTx to ensure that if there is a panic the session will always be closed. Signed-off-by: Andrew Thornton <art27@cantab.net>
Diffstat (limited to 'models/context.go')
-rw-r--r--models/context.go7
1 files changed, 2 insertions, 5 deletions
diff --git a/models/context.go b/models/context.go
index a074d06834..8c29f74d20 100644
--- a/models/context.go
+++ b/models/context.go
@@ -45,19 +45,16 @@ func WithContext(f func(ctx DBContext) error) error {
// WithTx represents executing database operations on a transaction
func WithTx(f func(ctx DBContext) error) error {
sess := x.NewSession()
+ defer sess.Close()
if err := sess.Begin(); err != nil {
- sess.Close()
return err
}
if err := f(DBContext{sess}); err != nil {
- sess.Close()
return err
}
- err := sess.Commit()
- sess.Close()
- return err
+ return sess.Commit()
}
// Iterate iterates the databases and doing something