diff options
Diffstat (limited to 'pkg')
| -rw-r--r-- | pkg/manager/repro.go | 8 | ||||
| -rw-r--r-- | pkg/manager/repro_test.go | 9 |
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) } |
