diff options
author | Ethan Koenig <etk39@cornell.edu> | 2017-05-31 04:57:17 -0400 |
---|---|---|
committer | Lunny Xiao <xiaolunwen@gmail.com> | 2017-05-31 16:57:17 +0800 |
commit | bfb44f885468839259bc2ead999953cdd85654e1 (patch) | |
tree | 1b8b404133dad5ad4650d15a0a9acc6207fb916b /models | |
parent | 0f5b399e351786254f48dc1e5ed3419c3153703f (diff) | |
download | gitea-bfb44f885468839259bc2ead999953cdd85654e1.tar.gz gitea-bfb44f885468839259bc2ead999953cdd85654e1.zip |
Fix status table race condition (#1835)
Diffstat (limited to 'models')
-rw-r--r-- | models/repo.go | 9 | ||||
-rw-r--r-- | models/repo_mirror.go | 3 | ||||
-rw-r--r-- | models/user.go | 3 |
3 files changed, 5 insertions, 10 deletions
diff --git a/models/repo.go b/models/repo.go index 9f5318e2f6..7aaeb6e0e7 100644 --- a/models/repo.go +++ b/models/repo.go @@ -1881,10 +1881,9 @@ func DeleteRepositoryArchives() error { // DeleteOldRepositoryArchives deletes old repository archives. func DeleteOldRepositoryArchives() { - if taskStatusTable.IsRunning(archiveCleanup) { + if !taskStatusTable.StartIfNotRunning(archiveCleanup) { return } - taskStatusTable.Start(archiveCleanup) defer taskStatusTable.Stop(archiveCleanup) log.Trace("Doing: ArchiveCleanup") @@ -2025,10 +2024,9 @@ const ( // GitFsck calls 'git fsck' to check repository health. func GitFsck() { - if taskStatusTable.IsRunning(gitFsck) { + if !taskStatusTable.StartIfNotRunning(gitFsck) { return } - taskStatusTable.Start(gitFsck) defer taskStatusTable.Stop(gitFsck) log.Trace("Doing: GitFsck") @@ -2097,10 +2095,9 @@ func repoStatsCheck(checker *repoChecker) { // CheckRepoStats checks the repository stats func CheckRepoStats() { - if taskStatusTable.IsRunning(checkRepos) { + if !taskStatusTable.StartIfNotRunning(checkRepos) { return } - taskStatusTable.Start(checkRepos) defer taskStatusTable.Stop(checkRepos) log.Trace("Doing: CheckRepoStats") diff --git a/models/repo_mirror.go b/models/repo_mirror.go index 8a97879253..4588597743 100644 --- a/models/repo_mirror.go +++ b/models/repo_mirror.go @@ -202,10 +202,9 @@ func DeleteMirrorByRepoID(repoID int64) error { // MirrorUpdate checks and updates mirror repositories. func MirrorUpdate() { - if taskStatusTable.IsRunning(mirrorUpdate) { + if !taskStatusTable.StartIfNotRunning(mirrorUpdate) { return } - taskStatusTable.Start(mirrorUpdate) defer taskStatusTable.Stop(mirrorUpdate) log.Trace("Doing: MirrorUpdate") diff --git a/models/user.go b/models/user.go index 3aef510d7c..8d8afdfdb8 100644 --- a/models/user.go +++ b/models/user.go @@ -1334,10 +1334,9 @@ func GetWatchedRepos(userID int64, private bool) ([]*Repository, error) { // SyncExternalUsers is used to synchronize users with external authorization source func SyncExternalUsers() { - if taskStatusTable.IsRunning(syncExternalUsers) { + if !taskStatusTable.StartIfNotRunning(syncExternalUsers) { return } - taskStatusTable.Start(syncExternalUsers) defer taskStatusTable.Stop(syncExternalUsers) log.Trace("Doing: SyncExternalUsers") |