diff options
author | Chris <ccbrown112@gmail.com> | 2018-02-23 12:56:32 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-23 12:56:32 -0600 |
commit | 55261a2b155c4e3d699fc6bd4255f05fb8258157 (patch) | |
tree | ed6f7006c90389108438270d2a837a0db9b28a2d /app/email_batching.go | |
parent | 5fb4b1bc935bd273990779e1d4a680a563784df8 (diff) | |
download | chat-55261a2b155c4e3d699fc6bd4255f05fb8258157.tar.gz chat-55261a2b155c4e3d699fc6bd4255f05fb8258157.tar.bz2 chat-55261a2b155c4e3d699fc6bd4255f05fb8258157.zip |
fix scheduled task race (#8355)
Diffstat (limited to 'app/email_batching.go')
-rw-r--r-- | app/email_batching.go | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/app/email_batching.go b/app/email_batching.go index 2a33d7d3e..07adda674 100644 --- a/app/email_batching.go +++ b/app/email_batching.go @@ -7,6 +7,7 @@ import ( "fmt" "html/template" "strconv" + "sync" "time" "github.com/mattermost/mattermost-server/model" @@ -57,6 +58,8 @@ type EmailBatchingJob struct { app *App newNotifications chan *batchedNotification pendingNotifications map[string][]*batchedNotification + task *model.ScheduledTask + taskMutex sync.Mutex } func NewEmailBatchingJob(a *App, bufferSize int) *EmailBatchingJob { @@ -68,12 +71,17 @@ func NewEmailBatchingJob(a *App, bufferSize int) *EmailBatchingJob { } func (job *EmailBatchingJob) Start() { - if task := model.GetTaskByName(EMAIL_BATCHING_TASK_NAME); task != nil { - task.Cancel() - } - l4g.Debug(utils.T("api.email_batching.start.starting"), *job.app.Config().EmailSettings.EmailBatchingInterval) - model.CreateRecurringTask(EMAIL_BATCHING_TASK_NAME, job.CheckPendingEmails, time.Duration(*job.app.Config().EmailSettings.EmailBatchingInterval)*time.Second) + newTask := model.CreateRecurringTask(EMAIL_BATCHING_TASK_NAME, job.CheckPendingEmails, time.Duration(*job.app.Config().EmailSettings.EmailBatchingInterval)*time.Second) + + job.taskMutex.Lock() + oldTask := job.task + job.task = newTask + job.taskMutex.Unlock() + + if oldTask != nil { + oldTask.Cancel() + } } func (job *EmailBatchingJob) Add(user *model.User, post *model.Post, team *model.Team) bool { |