diff --git a/app/server.go b/app/server.go index f1477d0129..e00d8743c9 100644 --- a/app/server.go +++ b/app/server.go @@ -2060,12 +2060,12 @@ func withMut(mut *sync.Mutex, f func()) { f() } -func cancelTask(mut *sync.Mutex, task *model.ScheduledTask) { +func cancelTask(mut *sync.Mutex, taskPointer **model.ScheduledTask) { mut.Lock() defer mut.Unlock() - if task != nil { - task.Cancel() - task = nil + if *taskPointer != nil { + (*taskPointer).Cancel() + *taskPointer = nil } } @@ -2082,7 +2082,7 @@ func runDNDStatusExpireJob(a *App) { a.ch.dndTask = model.CreateRecurringTaskFromNextIntervalTime("Unset DND Statuses", a.UpdateDNDStatusOfUsers, 5*time.Minute) }) } else { - cancelTask(&a.ch.dndTaskMut, a.ch.dndTask) + cancelTask(&a.ch.dndTaskMut, &a.ch.dndTask) } }) } @@ -2100,7 +2100,7 @@ func runPostReminderJob(a *App) { a.ch.postReminderTask = model.CreateRecurringTaskFromNextIntervalTime("Check Post reminders", a.CheckPostReminders, 5*time.Minute) }) } else { - cancelTask(&a.ch.postReminderMut, a.ch.postReminderTask) + cancelTask(&a.ch.postReminderMut, &a.ch.postReminderTask) } }) } diff --git a/app/server_test.go b/app/server_test.go index c1e0cd8fec..496a10822b 100644 --- a/app/server_test.go +++ b/app/server_test.go @@ -16,6 +16,7 @@ import ( "path" "strconv" "strings" + "sync" "testing" "time" @@ -565,3 +566,12 @@ func TestSentry(t *testing.T) { } }) } + +func TestCancelTaskSetsTaskToNil(t *testing.T) { + var taskMut sync.Mutex + task := model.CreateRecurringTaskFromNextIntervalTime("a test task", func() {}, 5*time.Minute) + require.NotNil(t, task) + cancelTask(&taskMut, &task) + require.Nil(t, task) + require.NotPanics(t, func() { cancelTask(&taskMut, &task) }) +}