diff --git a/api/client/stats.go b/api/client/stats.go index 332b78003b..ba56982b9e 100644 --- a/api/client/stats.go +++ b/api/client/stats.go @@ -37,7 +37,9 @@ func (s *containerStats) Collect(cli *DockerCli, streamStats bool) { } stream, _, err := cli.call("GET", "/containers/"+s.Name+"/stats?"+v.Encode(), nil, nil) if err != nil { + s.mu.Lock() s.err = err + s.mu.Unlock() return } defer stream.Close() diff --git a/daemon/execdriver/native/driver.go b/daemon/execdriver/native/driver.go index 1e1df1f21b..4da3e34382 100644 --- a/daemon/execdriver/native/driver.go +++ b/daemon/execdriver/native/driver.go @@ -259,7 +259,9 @@ func (d *driver) Kill(c *execdriver.Command, sig int) error { } func (d *driver) Pause(c *execdriver.Command) error { + d.Lock() active := d.activeContainers[c.ID] + d.Unlock() if active == nil { return fmt.Errorf("active container for %s does not exist", c.ID) } @@ -267,7 +269,9 @@ func (d *driver) Pause(c *execdriver.Command) error { } func (d *driver) Unpause(c *execdriver.Command) error { + d.Lock() active := d.activeContainers[c.ID] + d.Unlock() if active == nil { return fmt.Errorf("active container for %s does not exist", c.ID) } @@ -335,7 +339,9 @@ func (d *driver) Clean(id string) error { } func (d *driver) Stats(id string) (*execdriver.ResourceStats, error) { + d.Lock() c := d.activeContainers[id] + d.Unlock() if c == nil { return nil, execdriver.ErrNotRunning }