aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--syz-ci/jobs.go13
-rw-r--r--syz-ci/syz-ci.go2
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()