aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
Diffstat (limited to 'pkg')
-rw-r--r--pkg/manager/repro.go8
-rw-r--r--pkg/manager/repro_test.go9
2 files changed, 8 insertions, 9 deletions
diff --git a/pkg/manager/repro.go b/pkg/manager/repro.go
index 9858a4629..7a50f06ab 100644
--- a/pkg/manager/repro.go
+++ b/pkg/manager/repro.go
@@ -197,8 +197,12 @@ func (r *ReproLoop) Loop(ctx context.Context) {
case <-ctx.Done():
return
}
- if crash == nil || !r.mgr.NeedRepro(crash) {
- continue
+ if crash != nil && !r.mgr.NeedRepro(crash) {
+ crash = nil
+ // Now we might not need that many VMs.
+ r.mu.Lock()
+ r.adjustPoolSizeLocked()
+ r.mu.Unlock()
}
}
diff --git a/pkg/manager/repro_test.go b/pkg/manager/repro_test.go
index 80d224fd5..0149aafdb 100644
--- a/pkg/manager/repro_test.go
+++ b/pkg/manager/repro_test.go
@@ -119,19 +119,14 @@ func TestReproRWRace(t *testing.T) {
assert.True(t, mock.NeedRepro(nil))
called := <-mock.run
- called.ret <- &ReproResult{}
// Pretend that processRepro() is finished and
// we've written "repro.prog" to the disk.
mock.reproProgExist.Store(true)
assert.False(t, mock.NeedRepro(nil))
+ called.ret <- &ReproResult{}
assert.True(t, obj.CanReproMore())
- called2 := <-mock.run
- called2.ret <- &ReproResult{}
- assert.False(t, mock.NeedRepro(nil))
- assert.True(t, obj.CanReproMore())
-
- // Reproducers may be still running.
+ // The second repro process will never be started.
mock.onVMShutdown(t, obj)
}