From dbc22b60dbf270f3238040e88eed24bab0b990cf Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Fri, 31 May 2024 18:24:18 +0200 Subject: pkg/fuzzer: don't keep whole call info for triage jobs It can be large and we need just errno. Store just it. --- pkg/fuzzer/fuzzer.go | 2 +- pkg/fuzzer/job.go | 10 +++++----- pkg/fuzzer/job_test.go | 1 - 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/pkg/fuzzer/fuzzer.go b/pkg/fuzzer/fuzzer.go index 44aad6010..f3de65e03 100644 --- a/pkg/fuzzer/fuzzer.go +++ b/pkg/fuzzer/fuzzer.go @@ -189,7 +189,7 @@ func (fuzzer *Fuzzer) triageProgCall(p *prog.Prog, info *flatrpc.CallInfo, call fuzzer.startJob(stat, &triageJob{ p: p.Clone(), call: call, - info: info, + errno: info.Error, newSignal: newMaxSignal, flags: flags, queue: queue.Append(), diff --git a/pkg/fuzzer/job.go b/pkg/fuzzer/job.go index 505feb28c..ef89f1f31 100644 --- a/pkg/fuzzer/job.go +++ b/pkg/fuzzer/job.go @@ -57,7 +57,7 @@ func mutateProgRequest(fuzzer *Fuzzer, rnd *rand.Rand) *queue.Request { type triageJob struct { p *prog.Prog call int - info *flatrpc.CallInfo + errno int32 newSignal signal.Signal flags ProgFlags fuzzer *Fuzzer @@ -147,7 +147,7 @@ func (job *triageJob) deflake(exec func(*queue.Request, ProgFlags) *queue.Result stop = true return } - if !reexecutionSuccess(result.Info, job.info, job.call) { + if !reexecutionSuccess(result.Info, job.errno, job.call) { // The call was not executed or failed. continue } @@ -197,7 +197,7 @@ func (job *triageJob) minimize(newSignal signal.Signal) (stop bool) { return false } info := result.Info - if !reexecutionSuccess(info, job.info, call1) { + if !reexecutionSuccess(info, job.errno, call1) { // The call was not executed or failed. continue } @@ -211,14 +211,14 @@ func (job *triageJob) minimize(newSignal signal.Signal) (stop bool) { return stop } -func reexecutionSuccess(info *flatrpc.ProgInfo, oldInfo *flatrpc.CallInfo, call int) bool { +func reexecutionSuccess(info *flatrpc.ProgInfo, oldErrno int32, call int) bool { if info == nil || len(info.Calls) == 0 { return false } if call != -1 { // Don't minimize calls from successful to unsuccessful. // Successful calls are much more valuable. - if oldInfo.Error == 0 && info.Calls[call].Error != 0 { + if oldErrno == 0 && info.Calls[call].Error != 0 { return false } return len(info.Calls[call].Signal) != 0 diff --git a/pkg/fuzzer/job_test.go b/pkg/fuzzer/job_test.go index 6cb983f48..a00545ae1 100644 --- a/pkg/fuzzer/job_test.go +++ b/pkg/fuzzer/job_test.go @@ -85,7 +85,6 @@ func TestDeflake(t *testing.T) { t.Run(fmt.Sprint(i), func(t *testing.T) { testJob := &triageJob{ p: prog, - info: &flatrpc.CallInfo{}, newSignal: test.NewSignal, } -- cgit mrf-deployment