From 5b53f368f2aa5b1e61ce954a6e546348ea1ae8e2 Mon Sep 17 00:00:00 2001 From: Aleksandr Nogikh Date: Tue, 27 Aug 2024 17:34:15 +0200 Subject: syz-manager: display job lists for triage and smash jobs This will let us understand better what exactly the fuzzer was doing. --- pkg/fuzzer/fuzzer.go | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) (limited to 'pkg/fuzzer/fuzzer.go') diff --git a/pkg/fuzzer/fuzzer.go b/pkg/fuzzer/fuzzer.go index afd131fc4..38a967251 100644 --- a/pkg/fuzzer/fuzzer.go +++ b/pkg/fuzzer/fuzzer.go @@ -29,6 +29,7 @@ type Fuzzer struct { rnd *rand.Rand target *prog.Target hintsLimiter prog.HintsLimiter + runningJobs map[jobIntrospector]struct{} ct *prog.ChoiceTable ctProgs int @@ -50,9 +51,10 @@ func NewFuzzer(ctx context.Context, cfg *Config, rnd *rand.Rand, Config: cfg, Cover: newCover(), - ctx: ctx, - rnd: rnd, - target: target, + ctx: ctx, + rnd: rnd, + target: target, + runningJobs: map[jobIntrospector]struct{}{}, // We're okay to lose some of the messages -- if we are already // regenerating the table, we don't want to repeat it right away. @@ -251,10 +253,24 @@ func (fuzzer *Fuzzer) startJob(stat *stat.Val, newJob job) { fuzzer.Logf(2, "started %T", newJob) go func() { stat.Add(1) + defer stat.Add(-1) + fuzzer.statJobs.Add(1) + defer fuzzer.statJobs.Add(-1) + + if obj, ok := newJob.(jobIntrospector); ok { + fuzzer.mu.Lock() + fuzzer.runningJobs[obj] = struct{}{} + fuzzer.mu.Unlock() + + defer func() { + fuzzer.mu.Lock() + delete(fuzzer.runningJobs, obj) + fuzzer.mu.Unlock() + }() + } + newJob.run(fuzzer) - fuzzer.statJobs.Add(-1) - stat.Add(-1) }() } @@ -354,6 +370,17 @@ func (fuzzer *Fuzzer) ChoiceTable() *prog.ChoiceTable { return fuzzer.ct } +func (fuzzer *Fuzzer) RunningJobs() []JobInfo { + fuzzer.mu.Lock() + defer fuzzer.mu.Unlock() + + var ret []JobInfo + for item := range fuzzer.runningJobs { + ret = append(ret, item.info()) + } + return ret +} + func (fuzzer *Fuzzer) logCurrentStats() { for { select { -- cgit mrf-deployment