aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/manager/diff.go
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2025-02-05 12:36:12 +0100
committerAleksandr Nogikh <nogikh@google.com>2025-02-05 12:03:52 +0000
commit4dc70884d20c8ad69fe1cc250ee95c52be025440 (patch)
tree223b37275de8765d2117e626eabf397e65e162ac /pkg/manager/diff.go
parentfee2000d0be1fd5964142a14de0371e7547d5589 (diff)
pkg/manager: handle context cancellations
There were a few spots where they were not considered.
Diffstat (limited to 'pkg/manager/diff.go')
-rw-r--r--pkg/manager/diff.go17
1 files changed, 13 insertions, 4 deletions
diff --git a/pkg/manager/diff.go b/pkg/manager/diff.go
index e839c63a2..bcdf0dfcb 100644
--- a/pkg/manager/diff.go
+++ b/pkg/manager/diff.go
@@ -62,7 +62,10 @@ func RunDiffFuzzer(ctx context.Context, baseCfg, newCfg *mgrconfig.Config, cfg D
if err != nil {
return err
}
- new.candidates <- info.Candidates
+ select {
+ case new.candidates <- info.Candidates:
+ case <-ctx.Done():
+ }
return nil
})
@@ -175,7 +178,10 @@ loop:
}
log.Logf(1, "found repro for %q (orig title: %q), took %.2f minutes",
ret.Repro.Report.Title, origTitle, ret.Stats.TotalTime.Minutes())
- go runner.Run(ret.Repro)
+ g.Go(func() error {
+ runner.Run(ctx, ret.Repro)
+ return nil
+ })
} else {
origTitle := ret.Crash.Report.Title
log.Logf(1, "failed repro for %q, err=%s", origTitle, ret.Err)
@@ -491,7 +497,7 @@ type reproRunnerResult struct {
repro *repro.Result
}
-func (rr *reproRunner) Run(r *repro.Result) {
+func (rr *reproRunner) Run(ctx context.Context, r *repro.Result) {
pool := rr.kernel.pool
cnt := int(rr.running.Add(1))
pool.ReserveForRun(min(cnt, pool.Total()))
@@ -535,7 +541,10 @@ func (rr *reproRunner) Run(r *repro.Result) {
log.Errorf("failed to run repro: %v", err)
return
}
- rr.done <- ret
+ select {
+ case rr.done <- ret:
+ case <-ctx.Done():
+ }
}
func PatchFocusAreas(cfg *mgrconfig.Config, gitPatches [][]byte) {