mirror of
https://github.com/clearlinux/docker.git
synced 2026-09-05 13:11:30 +00:00
[graph] Use a pipe for downloads to write progress
The process of pulling an image spawns a new goroutine for each layer in the
image manifest. If any of these downloads fail we would stop everything and
return the error, even though other goroutines would still be running and
writing output through a progress reader which is attached to an http response
writer. Since the request handler had already returned from the first error,
the http server panics when one of these download goroutines makes a write to
the response writer buffer.
This patch prevents this crash in the daemon http server by waiting for all of
the download goroutines to complete, even if one of them fails. Only then does
it return, terminating the request handler.
Docker-DCO-1.1-Signed-off-by: Josh Hawn <josh.hawn@docker.com> (github: jlhawn)
(cherry picked from commit d80c4244d3)
This commit is contained in:
committed by
David Calavera
parent
2c875215b1
commit
74df05ccaa
@@ -446,7 +446,7 @@ func (s *DockerRegistrySuite) TestPullFailsWithAlteredManifest(c *check.C) {
|
||||
imageReference := fmt.Sprintf("%s@%s", repoName, manifestDigest)
|
||||
out, exitStatus, _ := dockerCmdWithError(c, "pull", imageReference)
|
||||
if exitStatus == 0 {
|
||||
c.Fatalf("expected a zero exit status but got %d: %s", exitStatus, out)
|
||||
c.Fatalf("expected a non-zero exit status but got %d: %s", exitStatus, out)
|
||||
}
|
||||
|
||||
expectedErrorMsg := fmt.Sprintf("image verification failed for digest %s", manifestDigest)
|
||||
|
||||
Reference in New Issue
Block a user