Merge pull request #2296 from tedyu/rm-dev-when-err

vc: Remove device when AddDevice encounters error
This commit is contained in:
Eric Ernst 2019-12-04 14:23:49 -08:00 committed by GitHub
commit e3ba17123a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1779,17 +1779,28 @@ func (s *Sandbox) AddDevice(info config.DeviceInfo) (api.Device, error) {
return nil, fmt.Errorf("device manager isn't initialized")
}
var err error
b, err := s.devManager.NewDevice(info)
if err != nil {
return nil, err
}
defer func() {
if err != nil {
s.devManager.RemoveDevice(b.DeviceID())
}
}()
if err := s.devManager.AttachDevice(b.DeviceID(), s); err != nil {
if err = s.devManager.AttachDevice(b.DeviceID(), s); err != nil {
return nil, err
}
defer func() {
if err != nil {
s.devManager.DetachDevice(b.DeviceID(), s)
}
}()
if !s.supportNewStore() {
if err := s.storeSandboxDevices(); err != nil {
if err = s.storeSandboxDevices(); err != nil {
return nil, err
}
}