Commit 8b980929 authored by Mike Danese's avatar Mike Danese

make util.Until return immediately if stop is written inside the loop

parent f64780d6
......@@ -114,17 +114,22 @@ func Forever(f func(), period time.Duration) {
// stop channel is already closed. Pass NeverStop to Until if you
// don't want it stop.
func Until(f func(), period time.Duration, stopCh <-chan struct{}) {
select {
case <-stopCh:
return
default:
}
for {
select {
case <-stopCh:
return
default:
}
func() {
defer HandleCrash()
f()
}()
time.Sleep(period)
select {
case <-stopCh:
return
case <-time.After(period):
}
}
}
......
......@@ -24,6 +24,7 @@ import (
"reflect"
"strings"
"testing"
"time"
"github.com/ghodss/yaml"
)
......@@ -48,6 +49,17 @@ func TestUntil(t *testing.T) {
<-called
}
func TestUntilReturnsImmediately(t *testing.T) {
now := time.Now()
ch := make(chan struct{})
Until(func() {
close(ch)
}, 30*time.Second, ch)
if now.Add(25 * time.Second).Before(time.Now()) {
t.Errorf("Until did not return immediately when the stop chan was closed inside the func")
}
}
func TestHandleCrash(t *testing.T) {
count := 0
expect := 10
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment