diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2025-01-23 19:07:33 +0100 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2025-01-29 10:31:50 +0000 |
| commit | 6eea27042142c1c5e810b642deb831a8ed55b3da (patch) | |
| tree | a883e3ff7d2bfdd0a5d343d220b7d98f66b7639e /pkg/manager/diff.go | |
| parent | 865ef71e5889541e7310ee9b3da3a945f354da8b (diff) | |
pkg/manager: avoid log.Fatalf in manager.LoadSeeds
This enables graceful error handling in the caller code.
Diffstat (limited to 'pkg/manager/diff.go')
| -rw-r--r-- | pkg/manager/diff.go | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/pkg/manager/diff.go b/pkg/manager/diff.go index a96d4f9a8..17d056e1f 100644 --- a/pkg/manager/diff.go +++ b/pkg/manager/diff.go @@ -45,9 +45,15 @@ func RunDiffFuzzer(ctx context.Context, baseCfg, newCfg *mgrconfig.Config, debug if err != nil { return err } - go func() { - new.candidates <- LoadSeeds(newCfg, true).Candidates - }() + eg, ctx := errgroup.WithContext(ctx) + eg.Go(func() error { + info, err := LoadSeeds(newCfg, true) + if err != nil { + return err + } + new.candidates <- info.Candidates + return nil + }) stream := queue.NewRandomQueue(4096, rand.New(rand.NewSource(time.Now().UnixNano()))) base.source = stream @@ -73,8 +79,10 @@ func RunDiffFuzzer(ctx context.Context, baseCfg, newCfg *mgrconfig.Config, debug } new.http = diffCtx.http } - diffCtx.Loop(ctx) - return nil + eg.Go(func() error { + return diffCtx.Loop(ctx) + }) + return eg.Wait() } type diffContext struct { @@ -343,7 +351,15 @@ func (kc *kernelContext) setupFuzzer(features flatrpc.Feature, syscalls map[*pro kc.http.Corpus.Store(corpusObj) } - filtered := FilterCandidates(<-kc.candidates, syscalls, false).Candidates + var candidates []fuzzer.Candidate + select { + case candidates = <-kc.candidates: + case <-kc.ctx.Done(): + // The loop will be aborted later. + break + } + + filtered := FilterCandidates(candidates, syscalls, false).Candidates log.Logf(0, "%s: adding %d seeds", kc.name, len(filtered)) fuzzerObj.AddCandidates(filtered) |
