diff --git a/api/client/attach.go b/api/client/attach.go index 06968c96ad5bd..ee53b96508323 100644 --- a/api/client/attach.go +++ b/api/client/attach.go @@ -31,6 +31,8 @@ func (cli *DockerCli) CmdAttach(args ...string) error { return err } + defer stream.Close() + var c types.ContainerJSON if err := json.NewDecoder(stream).Decode(&c); err != nil { return err diff --git a/api/client/commit.go b/api/client/commit.go index a0ece80d1bfa3..55ff3d7e53b94 100644 --- a/api/client/commit.go +++ b/api/client/commit.go @@ -71,6 +71,8 @@ func (cli *DockerCli) CmdCommit(args ...string) error { return err } + defer stream.Close() + if err := json.NewDecoder(stream).Decode(&response); err != nil { return err } diff --git a/api/client/create.go b/api/client/create.go index b97d2c4d57d82..edd642f82e8ee 100644 --- a/api/client/create.go +++ b/api/client/create.go @@ -116,6 +116,8 @@ func (cli *DockerCli) createContainer(config *runconfig.Config, hostConfig *runc return nil, err } + defer stream.Close() + var response types.ContainerCreateResponse if err := json.NewDecoder(stream).Decode(&response); err != nil { return nil, err diff --git a/api/client/diff.go b/api/client/diff.go index 6a849240a727e..91669c2abd9f3 100644 --- a/api/client/diff.go +++ b/api/client/diff.go @@ -30,6 +30,8 @@ func (cli *DockerCli) CmdDiff(args ...string) error { return err } + defer rdr.Close() + changes := []types.ContainerChange{} if err := json.NewDecoder(rdr).Decode(&changes); err != nil { return err diff --git a/api/client/exec.go b/api/client/exec.go index 9eea94c1e4a67..9b1b59ad8f16f 100644 --- a/api/client/exec.go +++ b/api/client/exec.go @@ -28,6 +28,8 @@ func (cli *DockerCli) CmdExec(args ...string) error { return err } + defer stream.Close() + var response types.ContainerExecCreateResponse if err := json.NewDecoder(stream).Decode(&response); err != nil { return err diff --git a/api/client/history.go b/api/client/history.go index 44ae095fd2ddc..ece42c07d9436 100644 --- a/api/client/history.go +++ b/api/client/history.go @@ -29,6 +29,8 @@ func (cli *DockerCli) CmdHistory(args ...string) error { return err } + defer rdr.Close() + history := []types.ImageHistory{} if err := json.NewDecoder(rdr).Decode(&history); err != nil { return err diff --git a/api/client/images.go b/api/client/images.go index 084d1630598d7..701e19fcbba76 100644 --- a/api/client/images.go +++ b/api/client/images.go @@ -66,6 +66,8 @@ func (cli *DockerCli) CmdImages(args ...string) error { return err } + defer rdr.Close() + images := []types.Image{} if err := json.NewDecoder(rdr).Decode(&images); err != nil { return err diff --git a/api/client/info.go b/api/client/info.go index 692bc7482d194..4cfa76d5ff1e4 100644 --- a/api/client/info.go +++ b/api/client/info.go @@ -23,6 +23,8 @@ func (cli *DockerCli) CmdInfo(args ...string) error { return err } + defer rdr.Close() + info := &types.Info{} if err := json.NewDecoder(rdr).Decode(info); err != nil { return fmt.Errorf("Error reading remote info: %v", err) diff --git a/api/client/login.go b/api/client/login.go index 87437f79dba59..c88b6dac30bea 100644 --- a/api/client/login.go +++ b/api/client/login.go @@ -125,6 +125,8 @@ func (cli *DockerCli) CmdLogin(args ...string) error { return err } + defer stream.Close() + var response types.AuthResponse if err := json.NewDecoder(stream).Decode(&response); err != nil { // Upon error, remove entry diff --git a/api/client/port.go b/api/client/port.go index 2b3052abbdced..ec98184c7adfb 100644 --- a/api/client/port.go +++ b/api/client/port.go @@ -23,6 +23,8 @@ func (cli *DockerCli) CmdPort(args ...string) error { return err } + defer stream.Close() + var c struct { NetworkSettings struct { Ports nat.PortMap diff --git a/api/client/ps.go b/api/client/ps.go index a297f7df70d81..10ac9db4228d7 100644 --- a/api/client/ps.go +++ b/api/client/ps.go @@ -91,6 +91,8 @@ func (cli *DockerCli) CmdPs(args ...string) error { return err } + defer rdr.Close() + containers := []types.Container{} if err := json.NewDecoder(rdr).Decode(&containers); err != nil { return err diff --git a/api/client/rmi.go b/api/client/rmi.go index 8434a805c391b..19f2f61b5dfb2 100644 --- a/api/client/rmi.go +++ b/api/client/rmi.go @@ -36,6 +36,8 @@ func (cli *DockerCli) CmdRmi(args ...string) error { fmt.Fprintf(cli.err, "%s\n", err) errNames = append(errNames, name) } else { + defer rdr.Close() + dels := []types.ImageDelete{} if err := json.NewDecoder(rdr).Decode(&dels); err != nil { fmt.Fprintf(cli.err, "%s\n", err) diff --git a/api/client/search.go b/api/client/search.go index 02c1f7d556742..1fdff73f2fc28 100644 --- a/api/client/search.go +++ b/api/client/search.go @@ -50,6 +50,8 @@ func (cli *DockerCli) CmdSearch(args ...string) error { return err } + defer rdr.Close() + results := ByStars{} if err := json.NewDecoder(rdr).Decode(&results); err != nil { return err diff --git a/api/client/start.go b/api/client/start.go index db806133ddf83..a04bc564a7668 100644 --- a/api/client/start.go +++ b/api/client/start.go @@ -66,6 +66,8 @@ func (cli *DockerCli) CmdStart(args ...string) error { return err } + defer stream.Close() + var c types.ContainerJSON if err := json.NewDecoder(stream).Decode(&c); err != nil { return err diff --git a/api/client/stats.go b/api/client/stats.go index e5d30fe7d4567..408d58f9a1264 100644 --- a/api/client/stats.go +++ b/api/client/stats.go @@ -42,7 +42,9 @@ func (s *containerStats) Collect(cli *DockerCli, streamStats bool) { s.mu.Unlock() return } + defer stream.Close() + var ( previousCPU uint64 previousSystem uint64 diff --git a/api/client/top.go b/api/client/top.go index fce32fd978605..736ba1a970d62 100644 --- a/api/client/top.go +++ b/api/client/top.go @@ -30,6 +30,8 @@ func (cli *DockerCli) CmdTop(args ...string) error { return err } + defer stream.Close() + procList := types.ContainerProcessList{} if err := json.NewDecoder(stream).Decode(&procList); err != nil { return err diff --git a/api/client/utils.go b/api/client/utils.go index 8397b2cd25e36..8513fae3832f3 100644 --- a/api/client/utils.go +++ b/api/client/utils.go @@ -250,6 +250,8 @@ func waitForExit(cli *DockerCli, containerID string) (int, error) { return -1, err } + defer stream.Close() + var res types.ContainerWaitResponse if err := json.NewDecoder(stream).Decode(&res); err != nil { return -1, err @@ -270,6 +272,8 @@ func getExitCode(cli *DockerCli, containerID string) (bool, int, error) { return false, -1, nil } + defer stream.Close() + var c types.ContainerJSON if err := json.NewDecoder(stream).Decode(&c); err != nil { return false, -1, err @@ -290,6 +294,8 @@ func getExecExitCode(cli *DockerCli, execID string) (bool, int, error) { return false, -1, nil } + defer stream.Close() + //TODO: Should we reconsider having a type in api/types? //this is a response to exex/id/json not container var c struct { diff --git a/api/client/version.go b/api/client/version.go index 33c54c5ffe030..c95608ee15dd5 100644 --- a/api/client/version.go +++ b/api/client/version.go @@ -45,6 +45,8 @@ func (cli *DockerCli) CmdVersion(args ...string) error { return err } + defer stream.Close() + var v types.Version if err := json.NewDecoder(stream).Decode(&v); err != nil { fmt.Fprintf(cli.err, "Error reading remote version: %s\n", err)