summaryrefslogtreecommitdiffstats
path: root/app/email_batching.go
diff options
context:
space:
mode:
authorChris <ccbrown112@gmail.com>2018-02-23 12:56:32 -0600
committerGitHub <noreply@github.com>2018-02-23 12:56:32 -0600
commit55261a2b155c4e3d699fc6bd4255f05fb8258157 (patch)
treeed6f7006c90389108438270d2a837a0db9b28a2d /app/email_batching.go
parent5fb4b1bc935bd273990779e1d4a680a563784df8 (diff)
downloadchat-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.go18
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 {