diff --git a/src/runtime/virtcontainers/qemu.go b/src/runtime/virtcontainers/qemu.go index c64e10f041..77d97d9911 100644 --- a/src/runtime/virtcontainers/qemu.go +++ b/src/runtime/virtcontainers/qemu.go @@ -692,6 +692,28 @@ func (q *qemu) setupVirtiofsd() (err error) { return err } +func (q *qemu) stopVirtiofsd() (err error) { + + // kill virtiofsd + if q.state.VirtiofsdPid == 0 { + return errors.New("invalid virtiofsd PID(0)") + } + + err = syscall.Kill(q.state.VirtiofsdPid, syscall.SIGKILL) + if err != nil { + return err + } + q.state.VirtiofsdPid = 0 + + // remove virtiofsd socket + sockPath, err := q.vhostFSSocketPath(q.id) + if err != nil { + return err + } + + return os.Remove(sockPath) +} + func (q *qemu) getMemArgs() (bool, string, string, error) { share := false target := "" @@ -813,6 +835,14 @@ func (q *qemu) startSandbox(timeout int) error { if err != nil { return err } + defer func() { + if err != nil { + if shutdownErr := q.stopVirtiofsd(); shutdownErr != nil { + q.Logger().WithError(shutdownErr).Warn("failed to stop virtiofsd") + } + } + }() + } var strErr string @@ -824,7 +854,6 @@ func (q *qemu) startSandbox(timeout int) error { strErr += string(b) } } - q.Logger().WithError(err).Errorf("failed to launch qemu: %s", strErr) return fmt.Errorf("failed to launch qemu: %s, error messages from qemu log: %s", err, strErr) }