diff --git a/components/engine/pkg/archive/archive.go b/components/engine/pkg/archive/archive.go index dd14b778f2..37b312e5b0 100644 --- a/components/engine/pkg/archive/archive.go +++ b/components/engine/pkg/archive/archive.go @@ -193,7 +193,6 @@ func (ta *tarAppender) addTarFile(path, name string) error { hdr.Devmajor = int64(major(uint64(stat.Rdev))) hdr.Devminor = int64(minor(uint64(stat.Rdev))) } - } // if it's a regular file and has more than 1 link, @@ -228,6 +227,7 @@ func (ta *tarAppender) addTarFile(path, name string) error { } ta.Buffer.Reset(ta.TarWriter) + defer ta.Buffer.Reset(nil) _, err = io.Copy(ta.Buffer, file) file.Close() if err != nil { @@ -237,7 +237,6 @@ func (ta *tarAppender) addTarFile(path, name string) error { if err != nil { return err } - ta.Buffer.Reset(nil) } return nil diff --git a/components/engine/pkg/archive/changes.go b/components/engine/pkg/archive/changes.go index 3e9ab45267..0a1f741c41 100644 --- a/components/engine/pkg/archive/changes.go +++ b/components/engine/pkg/archive/changes.go @@ -333,6 +333,8 @@ func ChangesDirs(newDir, oldDir string) ([]Change, error) { newRoot, err2 = collectFileInfo(newDir) errs <- err2 }() + + // block until both routines have returned for i := 0; i < 2; i++ { if err := <-errs; err != nil { return nil, err @@ -409,7 +411,9 @@ func ExportChanges(dir string, changes []Change) (Archive, error) { if err := ta.TarWriter.Close(); err != nil { log.Debugf("Can't close layer: %s", err) } - writer.Close() + if err := writer.Close(); err != nil { + log.Debugf("failed close Changes writer: %s", err) + } }() return reader, nil }