From 4be803250cffc379ca763ba8c6d330bbf21befff Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Tue, 11 Mar 2014 11:39:28 -0700 Subject: [PATCH 1/2] 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() } From 909b6bf3f30dfc8cbc8634d9c98640185f7605a2 Mon Sep 17 00:00:00 2001 From: "Guillaume J. Charmes" Date: Tue, 11 Mar 2014 12:08:32 -0700 Subject: [PATCH 2/2] Update parseLxcInfo to comply with new lxc1.0 format Docker-DCO-1.1-Signed-off-by: Guillaume J. Charmes (github: creack) Upstream-commit: fd0737df2c8ec8f0a4b4d8f20b2ad6e4c96adbd3 Component: engine --- components/engine/execdriver/lxc/info.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/engine/execdriver/lxc/info.go b/components/engine/execdriver/lxc/info.go index 3b2ea0d07f..27b4c58604 100644 --- a/components/engine/execdriver/lxc/info.go +++ b/components/engine/execdriver/lxc/info.go @@ -36,7 +36,7 @@ func parseLxcInfo(raw string) (*lxcInfo, error) { if len(parts) < 2 { continue } - switch strings.TrimSpace(parts[0]) { + switch strings.ToLower(strings.TrimSpace(parts[0])) { case "state": info.Running = strings.TrimSpace(parts[1]) == "RUNNING" case "pid":