From 32ebe81cf3e222b41b03b774ce59bee2e7ec923f Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Mon, 20 May 2019 18:53:12 +0200 Subject: [PATCH] pkg/repro: fix no output timeout We duplicated the no output timeout in the repro package, and it got out of sync. It's not 3 mins now, but 5 mins. Remove the duplication and fix this. --- pkg/repro/repro.go | 6 +++--- vm/vm.go | 4 ++-- vm/vm_test.go | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/repro/repro.go b/pkg/repro/repro.go index 61793ac7..b3b8d739 100644 --- a/pkg/repro/repro.go +++ b/pkg/repro/repro.go @@ -254,9 +254,9 @@ func (ctx *context) extractProg(entries []*prog.LogEntry) (*Result, error) { } // The shortest duration is 10 seconds to detect simple crashes (i.e. no races and no hangs). - // The longest duration is 5 minutes to catch races and hangs. Note that this value must be larger - // than hang/no output detection duration in vm.MonitorExecution, which is currently set to 3 mins. - timeouts := []time.Duration{10 * time.Second, 1 * time.Minute, 5 * time.Minute} + // The longest duration is 6 minutes to catch races and hangs. Note that this value must be larger + // than hang/no output detection duration in vm.MonitorExecution, which is currently set to 5 mins. + timeouts := []time.Duration{10 * time.Second, 1 * time.Minute, vm.NoOutputTimeout + time.Minute} for _, timeout := range timeouts { // Execute each program separately to detect simple crashes caused by a single program. diff --git a/vm/vm.go b/vm/vm.go index 3e6ee0cd..28eddeef 100644 --- a/vm/vm.go +++ b/vm/vm.go @@ -225,7 +225,7 @@ func (inst *Instance) MonitorExecution(outc <-chan []byte, errc <-chan error, // in 140-280s detection delay. // So the current timeout is 5 mins (300s). // We don't want it to be too long too because it will waste time on real hangs. - if time.Since(lastExecuteTime) < noOutputTimeout { + if time.Since(lastExecuteTime) < NoOutputTimeout { break } diag, wait := inst.Diagnose() @@ -347,7 +347,7 @@ var ( beforeContext = 1024 << 10 afterContext = 128 << 10 + NoOutputTimeout = 5 * time.Minute tickerPeriod = 10 * time.Second - noOutputTimeout = 5 * time.Minute waitForOutputTimeout = 10 * time.Second ) diff --git a/vm/vm_test.go b/vm/vm_test.go index 702e2626..e55cf218 100644 --- a/vm/vm_test.go +++ b/vm/vm_test.go @@ -72,7 +72,7 @@ func (inst *testInstance) Close() { func init() { beforeContext = 200 tickerPeriod = 1 * time.Second - noOutputTimeout = 5 * time.Second + NoOutputTimeout = 5 * time.Second waitForOutputTimeout = 3 * time.Second ctor := func(env *vmimpl.Env) (vmimpl.Pool, error) {