浏览代码

Ensure that progress reader is closed after usage

Signed-off-by: Stephen J Day <stephen.day@docker.com>
Stephen J Day 10 年之前
父节点
当前提交
4e4a5b2532
共有 1 个文件被更改,包括 9 次插入2 次删除
  1. 9 2
      graph/push.go

+ 9 - 2
graph/push.go

@@ -236,7 +236,10 @@ func (s *TagStore) pushImage(r *registry.Session, out io.Writer, imgID, ep strin
 	// Send the layer
 	// Send the layer
 	log.Debugf("rendered layer for %s of [%d] size", imgData.ID, layerData.Size)
 	log.Debugf("rendered layer for %s of [%d] size", imgData.ID, layerData.Size)
 
 
-	checksum, checksumPayload, err := r.PushImageLayerRegistry(imgData.ID, utils.ProgressReader(layerData, int(layerData.Size), out, sf, false, utils.TruncateID(imgData.ID), "Pushing"), ep, token, jsonRaw)
+	prgRd := utils.ProgressReader(layerData, int(layerData.Size), out, sf, false, utils.TruncateID(imgData.ID), "Pushing")
+	defer prgRd.Close()
+
+	checksum, checksumPayload, err := r.PushImageLayerRegistry(imgData.ID, prgRd, ep, token, jsonRaw)
 	if err != nil {
 	if err != nil {
 		return "", err
 		return "", err
 	}
 	}
@@ -338,8 +341,12 @@ func (s *TagStore) pushV2Repository(r *registry.Session, eng *engine.Engine, out
 			out.Write(sf.FormatProgress(utils.TruncateID(img.ID), "Image push failed", nil))
 			out.Write(sf.FormatProgress(utils.TruncateID(img.ID), "Image push failed", nil))
 			return err
 			return err
 		}
 		}
+
 		if !exists {
 		if !exists {
-			err = r.PutV2ImageBlob(endpoint, repoInfo.RemoteName, sumParts[0], manifestSum, utils.ProgressReader(arch, int(img.Size), out, sf, false, utils.TruncateID(img.ID), "Pushing"), auth)
+			prgRd := utils.ProgressReader(arch, int(img.Size), out, sf, false, utils.TruncateID(img.ID), "Pushing")
+			defer prgRd.Close()
+
+			err = r.PutV2ImageBlob(endpoint, repoInfo.RemoteName, sumParts[0], manifestSum, prgRd, auth)
 			if err != nil {
 			if err != nil {
 				out.Write(sf.FormatProgress(utils.TruncateID(img.ID), "Image push failed", nil))
 				out.Write(sf.FormatProgress(utils.TruncateID(img.ID), "Image push failed", nil))
 				return err
 				return err