diff --git a/tasks/schedule.go b/tasks/schedule.go index 2af828107bd7e2b102b4310c68cd0427267bfa52..576c33b0a6e2b15f53a883379ffd8930fd9df867 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 {