Skip to content

Commit

Permalink
fix sqlite lock (#5184)
Browse files Browse the repository at this point in the history
* fix sqlite lock

* fix bug

Co-Authored-By: lunny <xiaolunwen@gmail.com>

* fix bug

Co-Authored-By: lunny <xiaolunwen@gmail.com>
  • Loading branch information
lunny authored Oct 27, 2018
1 parent 99c09df commit 2b7c366
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 5 deletions.
5 changes: 3 additions & 2 deletions models/issue.go
Original file line number Diff line number Diff line change
Expand Up @@ -655,9 +655,9 @@ func (issue *Issue) changeStatus(e *xorm.Session, doer *User, repo *Repository,
}

// Check for open dependencies
if isClosed && issue.Repo.IsDependenciesEnabled() {
if isClosed && issue.Repo.isDependenciesEnabled(e) {
// only check if dependencies are enabled and we're about to close an issue, otherwise reopening an issue would fail when there are unsatisfied dependencies
noDeps, err := IssueNoDependenciesLeft(issue)
noDeps, err := issueNoDependenciesLeft(e, issue)
if err != nil {
return err
}
Expand Down Expand Up @@ -721,6 +721,7 @@ func (issue *Issue) ChangeStatus(doer *User, repo *Repository, isClosed bool) (e
if err = sess.Commit(); err != nil {
return fmt.Errorf("Commit: %v", err)
}
sess.Close()

mode, _ := AccessLevel(issue.Poster.ID, issue.Repo)
if issue.IsPull {
Expand Down
11 changes: 9 additions & 2 deletions models/issue_dependency.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,11 @@ func issueDepExists(e Engine, issueID int64, depID int64) (bool, error) {

// IssueNoDependenciesLeft checks if issue can be closed
func IssueNoDependenciesLeft(issue *Issue) (bool, error) {
return issueNoDependenciesLeft(x, issue)
}

exists, err := x.
func issueNoDependenciesLeft(e Engine, issue *Issue) (bool, error) {
exists, err := e.
Table("issue_dependency").
Select("issue.*").
Join("INNER", "issue", "issue.id = issue_dependency.dependency_id").
Expand All @@ -127,9 +130,13 @@ func IssueNoDependenciesLeft(issue *Issue) (bool, error) {

// IsDependenciesEnabled returns if dependecies are enabled and returns the default setting if not set.
func (repo *Repository) IsDependenciesEnabled() bool {
return repo.isDependenciesEnabled(x)
}

func (repo *Repository) isDependenciesEnabled(e Engine) bool {
var u *RepoUnit
var err error
if u, err = repo.GetUnit(UnitTypeIssues); err != nil {
if u, err = repo.getUnit(e, UnitTypeIssues); err != nil {
log.Trace("%s", err)
return setting.Service.DefaultEnableDependencies
}
Expand Down
6 changes: 5 additions & 1 deletion models/repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -448,7 +448,11 @@ func (repo *Repository) MustGetUnit(tp UnitType) *RepoUnit {

// GetUnit returns a RepoUnit object
func (repo *Repository) GetUnit(tp UnitType) (*RepoUnit, error) {
if err := repo.getUnits(x); err != nil {
return repo.getUnit(x, tp)
}

func (repo *Repository) getUnit(e Engine, tp UnitType) (*RepoUnit, error) {
if err := repo.getUnits(e); err != nil {
return nil, err
}
for _, unit := range repo.Units {
Expand Down

0 comments on commit 2b7c366

Please sign in to comment.