diff --git a/container.go b/container.go index 1e44ddd76c..a283b8d0bc 100644 --- a/container.go +++ b/container.go @@ -1416,9 +1416,12 @@ func (container *Container) ExportRw() (archive.Archive, error) { if container.runtime == nil { return nil, fmt.Errorf("Can't load storage driver for unregistered container %s", container.ID) } - defer container.Unmount() - - return container.runtime.Diff(container) + archive, err := container.runtime.Diff(container) + if err != nil { + container.Unmount() + return nil, err + } + return EofReader(archive, func() { container.Unmount() }), nil } func (container *Container) Export() (archive.Archive, error) { @@ -1428,6 +1431,7 @@ func (container *Container) Export() (archive.Archive, error) { archive, err := archive.Tar(container.basefs, archive.Uncompressed) if err != nil { + container.Unmount() return nil, err } return EofReader(archive, func() { container.Unmount() }), nil diff --git a/image.go b/image.go index b2d7f8eb49..dbd2173597 100644 --- a/image.go +++ b/image.go @@ -163,7 +163,7 @@ func (img *Image) TarLayer() (arch archive.Archive, err error) { } defer func() { - if err == nil { + if err != nil { driver.Put(img.ID) } }()