diff --git a/scheduler/scheduler.go b/scheduler/scheduler.go index 218c239..a641bda 100755 --- a/scheduler/scheduler.go +++ b/scheduler/scheduler.go @@ -5,13 +5,14 @@ import ( "errors" "fmt" "io/ioutil" + "regexp" + "strings" + "time" + "gitea.inhome.blapointe.com/local/firestormy/config" "gitea.inhome.blapointe.com/local/firestormy/config/ns" "gitea.inhome.blapointe.com/local/firestormy/logger" "gitea.inhome.blapointe.com/local/logb" - "regexp" - "strings" - "time" cron "github.com/robfig/cron/v3" ) @@ -23,14 +24,32 @@ type Scheduler struct { running map[string]cron.EntryID } +type semaphored struct { + job cron.Job + ch chan struct{} +} + +func (s semaphored) Run() { + s.ch <- struct{}{} + s.job.Run() + <-s.ch +} + func New() *Scheduler { l := logger.New() + semaphore := make(chan struct{}, 2) c := cron.New( cron.WithLocation(time.Local), cron.WithLogger(l), cron.WithChain( cron.SkipIfStillRunning(l), cron.Recover(l), + func(j cron.Job) cron.Job { + return semaphored{ + job: j, + ch: semaphore, + } + }, ), cron.WithParser(getParser()), ) diff --git a/scheduler/scheduler_test.go b/scheduler/scheduler_test.go index 3a1b33e..7972615 100755 --- a/scheduler/scheduler_test.go +++ b/scheduler/scheduler_test.go @@ -4,12 +4,13 @@ import ( "bytes" "fmt" "io/ioutil" - "gitea.inhome.blapointe.com/local/firestormy/config" - "gitea.inhome.blapointe.com/local/firestormy/config/ns" - "gitea.inhome.blapointe.com/local/storage" "os" "testing" "time" + + "gitea.inhome.blapointe.com/local/firestormy/config" + "gitea.inhome.blapointe.com/local/firestormy/config/ns" + "gitea.inhome.blapointe.com/local/storage" ) func TestSchedulerAddRemove(t *testing.T) {