diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2024-06-28 13:17:35 +0200 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2024-07-01 09:13:47 +0000 |
| commit | ce1ad06980f78675067a2519a76601cb6cdc692b (patch) | |
| tree | 2d5aa63c4d215113316ce1275e13a95fe1aee53b | |
| parent | 528b3bb623250193b5b01c2a99910eb46e85cc9e (diff) | |
vm/qemu: use the default vmimpl.Multiplex() function
| -rw-r--r-- | vm/qemu/qemu.go | 29 | ||||
| -rw-r--r-- | vm/vmimpl/vmimpl.go | 13 |
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 |
