From 24b6749504b7f46ce9e6eeb7bbcec1e45f0af151 Mon Sep 17 00:00:00 2001 From: Mikhail Klementev Date: Thu, 16 Feb 2023 06:27:17 +0000 Subject: [PATCH] Wait until ssh is available --- debug.go | 5 +++++ pew.go | 5 +++++ qemu/qemu-kernel.go | 14 ++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/debug.go b/debug.go index 778083d..a281982 100644 --- a/debug.go +++ b/debug.go @@ -207,6 +207,11 @@ func debugHandler(kcfg config.KernelConfig, workPath, kernRegex, gdb string, } defer os.RemoveAll(tmp) + err = q.WaitForSSH(time.Minute) + if err != nil { + return + } + if ka.StandardModules { // Module depends on one of the standard modules err = copyStandardModules(q, ki) diff --git a/pew.go b/pew.go index 1d0032a..d6968ca 100644 --- a/pew.go +++ b/pew.go @@ -506,6 +506,11 @@ func whatever(swg *sizedwaitgroup.SizedWaitGroup, ka config.Artifact, } } + err = q.WaitForSSH(qemuTimeout) + if err != nil { + return + } + remoteTest, err := copyTest(q, testPath, ka) if err != nil { return diff --git a/qemu/qemu-kernel.go b/qemu/qemu-kernel.go index 2c754cb..4d63b12 100644 --- a/qemu/qemu-kernel.go +++ b/qemu/qemu-kernel.go @@ -307,6 +307,20 @@ func (q *System) Stop() { } } +func (q System) WaitForSSH(timeout time.Duration) error { + for start := time.Now(); time.Since(start) < timeout; { + client, err := q.ssh("root") + if err != nil { + time.Sleep(time.Second / 10) + continue + } + client.Close() + return nil + } + + return errors.New("no ssh (timeout)") +} + func (q System) ssh(user string) (client *ssh.Client, err error) { cfg := &ssh.ClientConfig{ User: user,