Ensure the cleanup jobs in the deferrer are executed on error

Signed-off-by: Shijiang Wei <mountkin@gmail.com>
This commit is contained in:
Shijiang Wei 2015-08-16 12:19:44 +08:00
parent 744a6b0e7b
commit f0679089b9
3 changed files with 12 additions and 11 deletions

View File

@ -83,7 +83,7 @@ type data struct {
pid int
}
func (m *Manager) Apply(pid int) error {
func (m *Manager) Apply(pid int) (err error) {
if m.Cgroups == nil {
return nil
}

View File

@ -17,7 +17,7 @@ import (
type MemoryGroup struct {
}
func (s *MemoryGroup) Apply(d *data) error {
func (s *MemoryGroup) Apply(d *data) (err error) {
path, err := d.path("memory")
if err != nil {
if cgroups.IsNotFound(err) {
@ -28,21 +28,22 @@ func (s *MemoryGroup) Apply(d *data) error {
if err := os.MkdirAll(path, 0755); err != nil {
return err
}
defer func() {
if err != nil {
os.RemoveAll(path)
}
}()
if err := s.Set(path, d.c); err != nil {
return err
}
// We need to join memory cgroup after set memory limits, because
// kmem.limit_in_bytes can only be set when the cgroup is empty.
_, err = d.join("memory")
if err != nil {
if _, err = d.join("memory"); err != nil {
return err
}
defer func() {
if err != nil {
os.RemoveAll(path)
}
}()
return nil
}

View File

@ -173,9 +173,9 @@ func (p *initProcess) externalDescriptors() []string {
return p.fds
}
func (p *initProcess) start() error {
func (p *initProcess) start() (err error) {
defer p.parentPipe.Close()
err := p.cmd.Start()
err = p.cmd.Start()
p.childPipe.Close()
if err != nil {
return newSystemError(err)