fix: calling start multiple times should no-op

This commit is contained in:
John Roesler 2025-11-26 11:56:36 -06:00
parent 974802ab3b
commit 5425c7e313
No known key found for this signature in database
GPG Key ID: 3AA260B9FCA0A6E1
2 changed files with 37 additions and 0 deletions

View File

@ -824,6 +824,11 @@ func (s *scheduler) RemoveJob(id uuid.UUID) error {
}
func (s *scheduler) Start() {
if s.started.Load() {
s.logger.Warn("gocron: scheduler already started")
return
}
select {
case <-s.shutdownCtx.Done():
case s.startCh <- struct{}{}:

View File

@ -578,6 +578,38 @@ func TestScheduler_Shutdown(t *testing.T) {
})
}
func TestScheduler_Start(t *testing.T) {
defer verifyNoGoroutineLeaks(t)
t.Run("calling start multiple times is a no-op", func(t *testing.T) {
s := newTestScheduler(t)
var counter int
_, err := s.NewJob(
DurationJob(
100*time.Millisecond,
),
NewTask(
func() {
counter++
},
),
)
require.NoError(t, err)
s.Start()
s.Start()
s.Start()
time.Sleep(1000 * time.Millisecond)
require.NoError(t, s.Shutdown())
assert.Contains(t, []int{9, 10}, counter)
})
}
func TestScheduler_NewJob(t *testing.T) {
defer verifyNoGoroutineLeaks(t)
tests := []struct {