// settleTime is an upper bound on how long we expect signals to take to be
// delivered. Lower values make the test faster, but also flakier — especially
// on heavily loaded systems.
-const settleTime = 100 * time.Millisecond
+//
+// The current value is set based on flakes observed in the Go builders.
+var settleTime = 250 * time.Millisecond
+
+func init() {
+ if s := os.Getenv("GO_TEST_TIMEOUT_SCALE"); s != "" {
+ if scale, err := strconv.Atoi(s); err == nil {
+ settleTime *= time.Duration(scale)
+ }
+ }
+}
func waitSig(t *testing.T, c <-chan os.Signal, sig os.Signal) {
+ t.Helper()
waitSig1(t, c, sig, false)
}
func waitSigAll(t *testing.T, c <-chan os.Signal, sig os.Signal) {
+ t.Helper()
waitSig1(t, c, sig, true)
}
func waitSig1(t *testing.T, c <-chan os.Signal, sig os.Signal, all bool) {
+ t.Helper()
+
// Sleep multiple times to give the kernel more tries to
// deliver the signal.
start := time.Now()
timer.Reset(settleTime / 10)
}
}
- t.Fatalf("timeout waiting for %v", sig)
+ t.Fatalf("timeout after %v waiting for %v", settleTime, sig)
}
// quiesce waits until we can be reasonably confident that all pending signals