runtime: Register defer function at early stage

Register defer function at early stage ensure that
it can be called if the startSandbox fails.

Fixes: #2230

Signed-off-by: bin <bin@hyper.sh>
This commit is contained in:
bin 2021-07-14 17:20:53 +08:00
parent 67dfb0b922
commit d0bc148fe0

View File

@ -1008,6 +1008,12 @@ func (s *Sandbox) startVM(ctx context.Context) (err error) {
s.cw = consoleWatcher s.cw = consoleWatcher
} }
defer func() {
if err != nil {
s.hypervisor.stopSandbox(ctx, false)
}
}()
if err := s.network.Run(ctx, s.networkNS.NetNsPath, func() error { if err := s.network.Run(ctx, s.networkNS.NetNsPath, func() error {
if s.factory != nil { if s.factory != nil {
vm, err := s.factory.GetVM(ctx, VMConfig{ vm, err := s.factory.GetVM(ctx, VMConfig{
@ -1027,12 +1033,6 @@ func (s *Sandbox) startVM(ctx context.Context) (err error) {
return err return err
} }
defer func() {
if err != nil {
s.hypervisor.stopSandbox(ctx, false)
}
}()
// In case of vm factory, network interfaces are hotplugged // In case of vm factory, network interfaces are hotplugged
// after vm is started. // after vm is started.
if s.factory != nil { if s.factory != nil {