From e3715315e5d4f79101d4cd782877608675dff0df Mon Sep 17 00:00:00 2001 From: Aleksandr Nogikh Date: Thu, 24 Apr 2025 12:05:06 +0200 Subject: pkg/manager: wrap channel writes in select Writes to channels are dangerous in the presence of context cancellation - no one may be listening on the receiving side. Wrap the writes in a select that also awaits ctx.Done(). --- pkg/manager/diff.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/pkg/manager/diff.go b/pkg/manager/diff.go index 0ca4e3206..8f367b1e8 100644 --- a/pkg/manager/diff.go +++ b/pkg/manager/diff.go @@ -297,7 +297,11 @@ func (dc *diffContext) RunRepro(ctx context.Context, crash *Crash) *ReproResult Stats: stats, Err: err, } - dc.doneRepro <- ret + select { + case dc.doneRepro <- ret: + case <-ctx.Done(): + // If the context is cancelled, no one may be listening on doneRepro. + } return ret } @@ -506,7 +510,10 @@ func (kc *kernelContext) fuzzerInstance(ctx context.Context, inst *vm.Instance, lastExec, _ := kc.serv.ShutdownInstance(index, rep != nil) if rep != nil { rpcserver.PrependExecuting(rep, lastExec) - kc.crashes <- rep + select { + case kc.crashes <- rep: + case <-ctx.Done(): + } } if err != nil { log.Errorf("#%d run failed: %s", inst.Index(), err) -- cgit mrf-deployment