浏览代码

Merge pull request #166 from thaJeztah/18.09_backport_tarstream_release

[18.09 backport] layer/layer_store: ensure NewInputTarStream resources are released
Andrew Hsu 6 年之前
父节点
当前提交
e2ddb3a2ff
共有 1 个文件被更改,包括 4 次插入3 次删除
  1. 4 3
      layer/layer_store.go

+ 4 - 3
layer/layer_store.go

@@ -253,13 +253,14 @@ func (ls *layerStore) applyTar(tx *fileMetadataTransaction, ts io.Reader, parent
 	}
 	}
 
 
 	applySize, err := ls.driver.ApplyDiff(layer.cacheID, parent, rdr)
 	applySize, err := ls.driver.ApplyDiff(layer.cacheID, parent, rdr)
+	// discard trailing data but ensure metadata is picked up to reconstruct stream
+	// unconditionally call io.Copy here before checking err to ensure the resources
+	// allocated by NewInputTarStream above are always released
+	io.Copy(ioutil.Discard, rdr) // ignore error as reader may be closed
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
 
 
-	// Discard trailing data but ensure metadata is picked up to reconstruct stream
-	io.Copy(ioutil.Discard, rdr) // ignore error as reader may be closed
-
 	layer.size = applySize
 	layer.size = applySize
 	layer.diffID = DiffID(digester.Digest())
 	layer.diffID = DiffID(digester.Digest())