diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2024-08-27 17:34:15 +0200 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2024-08-28 07:56:58 +0000 |
| commit | 5b53f368f2aa5b1e61ce954a6e546348ea1ae8e2 (patch) | |
| tree | fe1df79049d8f90d017629d8d5b2c3431ba5df29 /pkg/fuzzer/fuzzer.go | |
| parent | 9881ea45723f0f7bbc5876d48c32a7cca1fecaa3 (diff) | |
syz-manager: display job lists for triage and smash jobs
This will let us understand better what exactly the fuzzer was doing.
Diffstat (limited to 'pkg/fuzzer/fuzzer.go')
| -rw-r--r-- | pkg/fuzzer/fuzzer.go | 37 |
1 files changed, 32 insertions, 5 deletions
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 { |
