mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
layer/layer_store: ensure NewInputTarStream resources are released
In applyTar, if the driver's ApplyDiff returns an error, the function returns early without calling io.Copy. As a consequence, the resources (a goroutine and some buffers holding the uncompressed image, the digest, etc...) allocated or referenced by NewInputTarStream above aren't released, as the worker goroutine only finishes when it finds EOF or a closed pipe. Signed-off-by: Sergio Lopez <slp@redhat.com>
This commit is contained in:
parent
c77afb700d
commit
5846db10af
1 changed files with 4 additions and 3 deletions
|
@ -253,13 +253,14 @@ func (ls *layerStore) applyTar(tx *fileMetadataTransaction, ts io.Reader, parent
|
|||
}
|
||||
|
||||
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 {
|
||||
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.diffID = DiffID(digester.Digest())
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue