aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzeripath <art27@cantab.net>2019-01-05 15:18:17 +0000
committertechknowlogick <hello@techknowlogick.com>2019-01-05 10:18:17 -0500
commit2904d8d6aa3db64a4bb452047d446daabb3f4740 (patch)
tree7a804e1a5f7c180e8d9427edd08b5d3db58e6d0c
parent109fc7975b5bf1181ad78290a745ac71929bb196 (diff)
downloadgitea-2904d8d6aa3db64a4bb452047d446daabb3f4740.tar.gz
gitea-2904d8d6aa3db64a4bb452047d446daabb3f4740.zip
Fix sqlite deadlock when assigning to a PR (#5640) (#5642)
* Fix sqlite deadlock when assigning to a PR Fix 5639 Signed-off-by: Andrew Thornton <art27@cantab.net> * More possible deadlocks found and fixed Signed-off-by: Andrew Thornton <art27@cantab.net>
-rw-r--r--models/issue.go2
-rw-r--r--models/issue_assignees.go8
-rw-r--r--models/issue_mail.go2
-rw-r--r--models/issue_user.go2
-rw-r--r--models/org.go6
-rw-r--r--models/repo_watch.go6
6 files changed, 17 insertions, 9 deletions
diff --git a/models/issue.go b/models/issue.go
index cee9b0ca5c..c982931c0f 100644
--- a/models/issue.go
+++ b/models/issue.go
@@ -1402,7 +1402,7 @@ func UpdateIssueMentions(e Engine, issueID int64, mentions []string) error {
}
memberIDs := make([]int64, 0, user.NumMembers)
- orgUsers, err := GetOrgUsersByOrgID(user.ID)
+ orgUsers, err := getOrgUsersByOrgID(e, user.ID)
if err != nil {
return fmt.Errorf("GetOrgUsersByOrgID [%d]: %v", user.ID, err)
}
diff --git a/models/issue_assignees.go b/models/issue_assignees.go
index 753396e39b..0fff2dfad5 100644
--- a/models/issue_assignees.go
+++ b/models/issue_assignees.go
@@ -44,7 +44,11 @@ func (issue *Issue) loadAssignees(e Engine) (err error) {
// GetAssigneesByIssue returns everyone assigned to that issue
func GetAssigneesByIssue(issue *Issue) (assignees []*User, err error) {
- err = issue.loadAssignees(x)
+ return getAssigneesByIssue(x, issue)
+}
+
+func getAssigneesByIssue(e Engine, issue *Issue) (assignees []*User, err error) {
+ err = issue.loadAssignees(e)
if err != nil {
return assignees, err
}
@@ -173,7 +177,7 @@ func (issue *Issue) changeAssignee(sess *xorm.Session, doer *User, assigneeID in
issue.PullRequest.Issue = issue
apiPullRequest := &api.PullRequestPayload{
Index: issue.Index,
- PullRequest: issue.PullRequest.APIFormat(),
+ PullRequest: issue.PullRequest.apiFormat(sess),
Repository: issue.Repo.innerAPIFormat(sess, mode, false),
Sender: doer.APIFormat(),
}
diff --git a/models/issue_mail.go b/models/issue_mail.go
index 7f780e667e..78dbd13def 100644
--- a/models/issue_mail.go
+++ b/models/issue_mail.go
@@ -48,7 +48,7 @@ func mailIssueCommentToParticipants(e Engine, issue *Issue, doer *User, content
}
// Assignees must receive any communications
- assignees, err := GetAssigneesByIssue(issue)
+ assignees, err := getAssigneesByIssue(e, issue)
if err != nil {
return err
}
diff --git a/models/issue_user.go b/models/issue_user.go
index 733c35df1f..58eb5117f8 100644
--- a/models/issue_user.go
+++ b/models/issue_user.go
@@ -54,7 +54,7 @@ func newIssueUsers(e Engine, repo *Repository, issue *Issue) error {
func updateIssueAssignee(e *xorm.Session, issue *Issue, assigneeID int64) (removed bool, err error) {
// Check if the user exists
- assignee, err := GetUserByID(assigneeID)
+ assignee, err := getUserByID(e, assigneeID)
if err != nil {
return false, err
}
diff --git a/models/org.go b/models/org.go
index bba5e22a21..81542f0e60 100644
--- a/models/org.go
+++ b/models/org.go
@@ -393,8 +393,12 @@ func GetOrgUsersByUserID(uid int64, all bool) ([]*OrgUser, error) {
// GetOrgUsersByOrgID returns all organization-user relations by organization ID.
func GetOrgUsersByOrgID(orgID int64) ([]*OrgUser, error) {
+ return getOrgUsersByOrgID(x, orgID)
+}
+
+func getOrgUsersByOrgID(e Engine, orgID int64) ([]*OrgUser, error) {
ous := make([]*OrgUser, 0, 10)
- err := x.
+ err := e.
Where("org_id=?", orgID).
Find(&ous)
return ous, err
diff --git a/models/repo_watch.go b/models/repo_watch.go
index 95c7e44e93..53a34efdaf 100644
--- a/models/repo_watch.go
+++ b/models/repo_watch.go
@@ -113,15 +113,15 @@ func notifyWatchers(e Engine, act *Action) error {
switch act.OpType {
case ActionCommitRepo, ActionPushTag, ActionDeleteTag, ActionDeleteBranch:
- if !act.Repo.CheckUnitUser(act.UserID, false, UnitTypeCode) {
+ if !act.Repo.checkUnitUser(e, act.UserID, false, UnitTypeCode) {
continue
}
case ActionCreateIssue, ActionCommentIssue, ActionCloseIssue, ActionReopenIssue:
- if !act.Repo.CheckUnitUser(act.UserID, false, UnitTypeIssues) {
+ if !act.Repo.checkUnitUser(e, act.UserID, false, UnitTypeIssues) {
continue
}
case ActionCreatePullRequest, ActionMergePullRequest, ActionClosePullRequest, ActionReopenPullRequest:
- if !act.Repo.CheckUnitUser(act.UserID, false, UnitTypePullRequests) {
+ if !act.Repo.checkUnitUser(e, act.UserID, false, UnitTypePullRequests) {
continue
}
}