diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2019-02-23 08:45:42 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2019-02-23 08:45:42 +0100 |
| commit | 18107ce07fa018a31936624088bc0bf37fdd432c (patch) | |
| tree | 23830a312f2da622c0e94379bd886843d2bb5a99 | |
| parent | baad4d3621fe1810df733c5cef0e4ab55c76f054 (diff) | |
syz-ci: make some manager creation errors non-fatal
If only part of the managers failed to initialize
we still can continue running the rest.
| -rw-r--r-- | syz-ci/manager.go | 8 | ||||
| -rw-r--r-- | syz-ci/syz-ci.go | 14 |
2 files changed, 15 insertions, 7 deletions
diff --git a/syz-ci/manager.go b/syz-ci/manager.go index 4867216ca..ef2dc9dcf 100644 --- a/syz-ci/manager.go +++ b/syz-ci/manager.go @@ -78,7 +78,7 @@ type Manager struct { stop chan struct{} } -func createManager(cfg *Config, mgrcfg *ManagerConfig, stop chan struct{}) *Manager { +func createManager(cfg *Config, mgrcfg *ManagerConfig, stop chan struct{}) (*Manager, error) { dir := osutil.Abs(filepath.Join("managers", mgrcfg.Name)) if err := osutil.MkdirAll(dir); err != nil { log.Fatal(err) @@ -95,12 +95,12 @@ func createManager(cfg *Config, mgrcfg *ManagerConfig, stop chan struct{}) *Mana // Assume compiler and config don't change underneath us. compilerID, err := build.CompilerIdentity(mgrcfg.Compiler) if err != nil { - log.Fatal(err) + return nil, err } var configData []byte if mgrcfg.KernelConfig != "" { if configData, err = ioutil.ReadFile(mgrcfg.KernelConfig); err != nil { - log.Fatal(err) + return nil, err } } syzkallerCommit, _ := readTag(filepath.FromSlash("syzkaller/current/tag")) @@ -131,7 +131,7 @@ func createManager(cfg *Config, mgrcfg *ManagerConfig, stop chan struct{}) *Mana stop: stop, } os.RemoveAll(mgr.currentDir) - return mgr + return mgr, nil } // Gates kernel builds. diff --git a/syz-ci/syz-ci.go b/syz-ci/syz-ci.go index 2c10fc992..38d74d42d 100644 --- a/syz-ci/syz-ci.go +++ b/syz-ci/syz-ci.go @@ -154,9 +154,17 @@ func main() { wg.Done() }() - managers := make([]*Manager, len(cfg.Managers)) - for i, mgrcfg := range cfg.Managers { - managers[i] = createManager(cfg, mgrcfg, stop) + var managers []*Manager + for _, mgrcfg := range cfg.Managers { + mgr, err := createManager(cfg, mgrcfg, stop) + if err != nil { + log.Logf(0, "failed to create manager %v: %v", mgrcfg.Name, err) + continue + } + managers = append(managers, mgr) + } + if len(managers) == 0 { + log.Fatalf("failed to create all managers") } for _, mgr := range managers { mgr := mgr |
