Skip to content

Commit ccba498

Browse files
author
Rob Figueiredo
committed
chain/SkipIfStillRunning: fix bug handling different jobs
It was an error in channel scoping that was identified in pull #263. This adds a unit test to identify that issue and verify the fix.
1 parent 3d516cc commit ccba498

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

chain.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,9 @@ func DelayIfStillRunning(logger Logger) JobWrapper {
7676
// SkipIfStillRunning skips an invocation of the Job if a previous invocation is
7777
// still running. It logs skips to the given logger at Info level.
7878
func SkipIfStillRunning(logger Logger) JobWrapper {
79-
var ch = make(chan struct{}, 1)
80-
ch <- struct{}{}
8179
return func(j Job) Job {
80+
var ch = make(chan struct{}, 1)
81+
ch <- struct{}{}
8282
return FuncJob(func() {
8383
select {
8484
case v := <-ch:

chain_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,4 +218,25 @@ func TestChainSkipIfStillRunning(t *testing.T) {
218218
}
219219
})
220220

221+
t.Run("different jobs independent", func(t *testing.T) {
222+
var j1, j2 countJob
223+
j1.delay = 10 * time.Millisecond
224+
j2.delay = 10 * time.Millisecond
225+
chain := NewChain(SkipIfStillRunning(DiscardLogger))
226+
wrappedJob1 := chain.Then(&j1)
227+
wrappedJob2 := chain.Then(&j2)
228+
for i := 0; i < 11; i++ {
229+
go wrappedJob1.Run()
230+
go wrappedJob2.Run()
231+
}
232+
time.Sleep(100 * time.Millisecond)
233+
var (
234+
done1 = j1.Done()
235+
done2 = j2.Done()
236+
)
237+
if done1 != 1 || done2 != 1 {
238+
t.Error("expected both jobs executed once, got", done1, "and", done2)
239+
}
240+
})
241+
221242
}

0 commit comments

Comments
 (0)