From 9f9ba272e8e0e202daa8fb82f8f74bfca27c62c2 Mon Sep 17 00:00:00 2001 From: Andrew Thornton Date: Tue, 14 Dec 2021 16:55:50 +0000 Subject: [PATCH] Prevent deadlock in create issue (#17970) Backport #17970 When we have a transaction - queries to tables already queried must be queried within that transaction. repo.IsTimeTrackerEnabled() called repo.GetUnit() meaning that issue.loadAttributes causes a deadlock. Signed-off-by: Andrew Thornton --- models/repo_issue.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/models/repo_issue.go b/models/repo_issue.go index 433d0e39bd839..cd27d4fb8f612 100644 --- a/models/repo_issue.go +++ b/models/repo_issue.go @@ -21,13 +21,18 @@ func (repo *Repository) CanEnableTimetracker() bool { // IsTimetrackerEnabled returns whether or not the timetracker is enabled. It returns the default value from config if an error occurs. func (repo *Repository) IsTimetrackerEnabled() bool { + return repo.isTimetrackerEnabled(x) +} + +// IsTimetrackerEnabled returns whether or not the timetracker is enabled. It returns the default value from config if an error occurs. +func (repo *Repository) isTimetrackerEnabled(e Engine) bool { if !setting.Service.EnableTimetracking { return false } var u *RepoUnit var err error - if u, err = repo.GetUnit(UnitTypeIssues); err != nil { + if u, err = repo.getUnit(e, UnitTypeIssues); err != nil { return setting.Service.DefaultEnableTimetracking } return u.IssuesConfig().EnableTimetracker