aboutsummaryrefslogtreecommitdiffstats
path: root/vm
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2024-06-28 13:17:35 +0200
committerAleksandr Nogikh <nogikh@google.com>2024-07-01 09:13:47 +0000
commitce1ad06980f78675067a2519a76601cb6cdc692b (patch)
tree2d5aa63c4d215113316ce1275e13a95fe1aee53b /vm
parent528b3bb623250193b5b01c2a99910eb46e85cc9e (diff)
vm/qemu: use the default vmimpl.Multiplex() function
Diffstat (limited to 'vm')
-rw-r--r--vm/qemu/qemu.go29
-rw-r--r--vm/vmimpl/vmimpl.go13
2 files changed, 10 insertions, 32 deletions
diff --git a/vm/qemu/qemu.go b/vm/qemu/qemu.go
index 3749dd317..3a5e9f8a6 100644
--- a/vm/qemu/qemu.go
+++ b/vm/qemu/qemu.go
@@ -672,34 +672,7 @@ func (inst *instance) Run(timeout time.Duration, stop <-chan bool, command strin
return nil, nil, err
}
wpipe.Close()
- errc := make(chan error, 1)
- signal := func(err error) {
- select {
- case errc <- err:
- default:
- }
- }
-
- go func() {
- select {
- case <-time.After(timeout):
- signal(vmimpl.ErrTimeout)
- case <-stop:
- signal(vmimpl.ErrTimeout)
- case err := <-inst.merger.Err:
- cmd.Process.Kill()
- if cmdErr := cmd.Wait(); cmdErr == nil {
- // If the command exited successfully, we got EOF error from merger.
- // But in this case no error has happened and the EOF is expected.
- err = nil
- }
- signal(err)
- return
- }
- cmd.Process.Kill()
- cmd.Wait()
- }()
- return inst.merger.Output, errc, nil
+ return vmimpl.Multiplex(cmd, inst.merger, nil, timeout, stop, nil, inst.debug)
}
func (inst *instance) Info() ([]byte, error) {
diff --git a/vm/vmimpl/vmimpl.go b/vm/vmimpl/vmimpl.go
index 0a4ada028..be7186889 100644
--- a/vm/vmimpl/vmimpl.go
+++ b/vm/vmimpl/vmimpl.go
@@ -168,8 +168,11 @@ func Multiplex(cmd *exec.Cmd, merger *OutputMerger, console io.Closer, timeout t
signal(fmt.Errorf("instance closed"))
case err := <-merger.Err:
cmd.Process.Kill()
- console.Close()
- merger.Wait()
+ if console != nil {
+ // Only wait for the merger if we're able to control the console stream.
+ console.Close()
+ merger.Wait()
+ }
if cmdErr := cmd.Wait(); cmdErr == nil {
// If the command exited successfully, we got EOF error from merger.
// But in this case no error has happened and the EOF is expected.
@@ -179,8 +182,10 @@ func Multiplex(cmd *exec.Cmd, merger *OutputMerger, console io.Closer, timeout t
return
}
cmd.Process.Kill()
- console.Close()
- merger.Wait()
+ if console != nil {
+ console.Close()
+ merger.Wait()
+ }
cmd.Wait()
}()
return merger.Output, errc, nil