diff options
Diffstat (limited to 'runsc')
-rw-r--r-- | runsc/cgroup/cgroup.go | 4 | ||||
-rw-r--r-- | runsc/container/container.go | 6 | ||||
-rw-r--r-- | runsc/sandbox/sandbox.go | 4 |
3 files changed, 11 insertions, 3 deletions
diff --git a/runsc/cgroup/cgroup.go b/runsc/cgroup/cgroup.go index d6058a8a2..0ceeb3f28 100644 --- a/runsc/cgroup/cgroup.go +++ b/runsc/cgroup/cgroup.go @@ -190,7 +190,9 @@ func (c *Cgroup) Install(res *specs.LinuxResources) error { // Mark that cgroup resources are owned by me. log.Debugf("Creating cgroup %q", c.Name) c.Own = true - clean := specutils.MakeCleanup(func() { c.Uninstall() }) + // The Cleanup object cleans up partially created cgroups when an error occurs. + // Errors occuring during cleanup itself are ignored. + clean := specutils.MakeCleanup(func() { _ = c.Uninstall() }) defer clean.Clean() for key, ctrl := range controllers { diff --git a/runsc/container/container.go b/runsc/container/container.go index cb4c9b5c1..9da25a863 100644 --- a/runsc/container/container.go +++ b/runsc/container/container.go @@ -262,7 +262,9 @@ func Create(id string, spec *specs.Spec, conf *boot.Config, bundleDir, consoleSo Status: Creating, Owner: os.Getenv("USER"), } - cu := specutils.MakeCleanup(func() { c.Destroy() }) + // The Cleanup object cleans up partially created containers when an error occurs. + // Any errors occuring during cleanup itself are ignored. + cu := specutils.MakeCleanup(func() { _ = c.Destroy() }) defer cu.Clean() // If the metadata annotations indicate that this container should be @@ -424,6 +426,8 @@ func Run(id string, spec *specs.Spec, conf *boot.Config, bundleDir, consoleSocke if err != nil { return 0, fmt.Errorf("error creating container: %v", err) } + // Clean up partially created container if an error ocurrs. + // Any errors returned by Destroy() itself are ignored. defer c.Destroy() if err := c.Start(conf); err != nil { diff --git a/runsc/sandbox/sandbox.go b/runsc/sandbox/sandbox.go index 0fe85cfe1..df235c5e9 100644 --- a/runsc/sandbox/sandbox.go +++ b/runsc/sandbox/sandbox.go @@ -68,7 +68,9 @@ type Sandbox struct { // sandbox. func Create(id string, spec *specs.Spec, conf *boot.Config, bundleDir, consoleSocket, userLog string, ioFiles []*os.File) (*Sandbox, error) { s := &Sandbox{ID: id} - c := specutils.MakeCleanup(func() { s.destroy() }) + // The Cleanup object cleans up partially created sandboxes when an error occurs. + // Any errors occuring during cleanup itself are ignored. + c := specutils.MakeCleanup(func() { _ = s.destroy() }) defer c.Clean() if cg, ok := cgroup.New(spec); ok { |