From 4be803250cffc379ca763ba8c6d330bbf21befff Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Tue, 11 Mar 2014 11:39:28 -0700 Subject: [PATCH] Remove goroutine leak upon error Docker-DCO-1.1-Signed-off-by: Guillaume J. Charmes (github: creack) Upstream-commit: 721562f29685ebf3f3698113cf0ce8000c02e606 Component: engine --- components/engine/execdriver/lxc/driver.go | 3 +++ components/engine/server.go | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/components/engine/execdriver/lxc/driver.go b/components/engine/execdriver/lxc/driver.go index 765a52ee43..b398cb1a37 100644 --- a/components/engine/execdriver/lxc/driver.go +++ b/components/engine/execdriver/lxc/driver.go @@ -168,6 +168,9 @@ func (d *driver) Run(c *execdriver.Command, pipes *execdriver.Pipes, startCallba // Poll lxc for RUNNING status pid, err := d.waitForStart(c, waitLock) if err != nil { + if c.Process != nil { + c.Process.Kill() + } return -1, err } c.ContainerPid = pid diff --git a/components/engine/server.go b/components/engine/server.go index 48bb6f9805..d6a4036faf 100644 --- a/components/engine/server.go +++ b/components/engine/server.go @@ -2384,7 +2384,13 @@ func (srv *Server) IsRunning() bool { } func (srv *Server) Close() error { + if srv == nil { + return nil + } srv.SetRunning(false) + if srv.runtime == nil { + return nil + } return srv.runtime.Close() }