From 80765640f0a7bb91a4f7cccdeb566e84e76f56a1 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Tue, 12 Mar 2019 14:12:05 +0100 Subject: syz-ci: ignore job errors on shutdown Ctrl+C can kill a child process which will cause an error. Ignore such errors, it's better to retry after restart then to report a false failure. Update #501 --- syz-ci/jobs.go | 13 ++++++++++++- syz-ci/syz-ci.go | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/syz-ci/jobs.go b/syz-ci/jobs.go index 8998ce0fd..41b99109a 100644 --- a/syz-ci/jobs.go +++ b/syz-ci/jobs.go @@ -31,18 +31,20 @@ type JobProcessor struct { managers []*Manager knownCommits map[string]bool stop chan struct{} + shutdownPending chan struct{} dash *dashapi.Dashboard syzkallerRepo string syzkallerBranch string } -func newJobProcessor(cfg *Config, managers []*Manager, stop chan struct{}) *JobProcessor { +func newJobProcessor(cfg *Config, managers []*Manager, stop, shutdownPending chan struct{}) *JobProcessor { jp := &JobProcessor{ cfg: cfg, name: fmt.Sprintf("%v-job", cfg.Name), managers: managers, knownCommits: make(map[string]bool), stop: stop, + shutdownPending: shutdownPending, syzkallerRepo: cfg.SyzkallerRepo, syzkallerBranch: cfg.SyzkallerBranch, } @@ -231,6 +233,15 @@ func (jp *JobProcessor) processJob(job *Job) { resp := jp.process(job) log.Logf(0, "done job %v: commit %v, crash %q, error: %s", resp.ID, resp.Build.KernelCommit, resp.CrashTitle, resp.Error) + select { + case <-jp.shutdownPending: + if len(resp.Error) != 0 { + // Ctrl+C can kill a child process which will cause an error. + log.Logf(0, "ignoring error: shutdown pending") + return + } + default: + } if err := jp.dash.JobDone(resp); err != nil { jp.Errorf("failed to mark job as done: %v", err) return diff --git a/syz-ci/syz-ci.go b/syz-ci/syz-ci.go index a762572de..b7d2c72c0 100644 --- a/syz-ci/syz-ci.go +++ b/syz-ci/syz-ci.go @@ -180,7 +180,7 @@ func main() { }() } - jp := newJobProcessor(cfg, managers, stop) + jp := newJobProcessor(cfg, managers, stop, shutdownPending) wg.Add(1) go func() { defer wg.Done() -- cgit mrf-deployment