From b64db6716f1a10d4517ee9e34c9a11a18558ec60 Mon Sep 17 00:00:00 2001 From: Travis Ralston <travpc@gmail.com> Date: Tue, 15 Aug 2023 15:03:47 -0600 Subject: [PATCH] Fix deadlock/race conditions in scheduled tasks reload --- tasks/schedule.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tasks/schedule.go b/tasks/schedule.go index 2af82810..576c33b0 100644 --- a/tasks/schedule.go +++ b/tasks/schedule.go @@ -71,15 +71,23 @@ func scheduleHourly(name RecurringTaskName, workFn RecurringTaskFn) { recurLock.Lock() defer recurLock.Unlock() if val, ok := recurDoneChs[name]; ok { - val <- true // close that channel + // Check if closed, and close if needed + select { + case <-val: + break // already closed + default: + val <- true // close that channel + } } recurDoneChs[name] = ch go func() { - defer close(ch) defer func() { + close(ch) recurLock.Lock() defer recurLock.Unlock() - delete(recurDoneChs, name) + if recurDoneChs[name] == ch { + delete(recurDoneChs, name) + } }() for { -- GitLab