Skip to content

Commit 7ca5ef9

Browse files
committed
Fix deadlock on sqlite
1 parent 68e6515 commit 7ca5ef9

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

models/user.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1452,14 +1452,19 @@ func ValidateCommitsWithEmails(oldCommits *list.List) *list.List {
14521452

14531453
// GetUserByEmail returns the user object by given e-mail if exists.
14541454
func GetUserByEmail(email string) (*User, error) {
1455+
return GetUserByEmailContext(DefaultDBContext(), email)
1456+
}
1457+
1458+
// GetUserByEmailContext returns the user object by given e-mail if exists with db context
1459+
func GetUserByEmailContext(ctx DBContext, email string) (*User, error) {
14551460
if len(email) == 0 {
14561461
return nil, ErrUserNotExist{0, email, 0}
14571462
}
14581463

14591464
email = strings.ToLower(email)
14601465
// First try to find the user by primary email
14611466
user := &User{Email: email}
1462-
has, err := x.Get(user)
1467+
has, err := ctx.e.Get(user)
14631468
if err != nil {
14641469
return nil, err
14651470
}
@@ -1469,19 +1474,19 @@ func GetUserByEmail(email string) (*User, error) {
14691474

14701475
// Otherwise, check in alternative list for activated email addresses
14711476
emailAddress := &EmailAddress{Email: email, IsActivated: true}
1472-
has, err = x.Get(emailAddress)
1477+
has, err = ctx.e.Get(emailAddress)
14731478
if err != nil {
14741479
return nil, err
14751480
}
14761481
if has {
1477-
return GetUserByID(emailAddress.UID)
1482+
return getUserByID(ctx.e, emailAddress.UID)
14781483
}
14791484

14801485
// Finally, if email address is the protected email address:
14811486
if strings.HasSuffix(email, fmt.Sprintf("@%s", setting.Service.NoReplyAddress)) {
14821487
username := strings.TrimSuffix(email, fmt.Sprintf("@%s", setting.Service.NoReplyAddress))
14831488
user := &User{LowerName: username}
1484-
has, err := x.Get(user)
1489+
has, err := ctx.e.Get(user)
14851490
if err != nil {
14861491
return nil, err
14871492
}

modules/repository/update.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,13 @@ func pushUpdateAddTags(ctx models.DBContext, repo *models.Repository, gitRepo *g
7272
var ok bool
7373
author, ok = emailToUser[sig.Email]
7474
if !ok {
75-
author, err = models.GetUserByEmail(sig.Email)
75+
author, err = models.GetUserByEmailContext(ctx, sig.Email)
7676
if err != nil && !models.IsErrUserNotExist(err) {
7777
return fmt.Errorf("GetUserByEmail: %v", err)
7878
}
79+
if author != nil {
80+
emailToUser[sig.Email] = author
81+
}
7982
}
8083
createdAt = sig.When
8184
}

0 commit comments

Comments
 (0)