differ: fix deadlock on commit error
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
parent
810b3c37bb
commit
5b9bd993a8
@ -74,6 +74,9 @@ func (w *writer) Write(p []byte) (n int, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (w *writer) Commit(ctx context.Context, size int64, expected digest.Digest, opts ...content.Opt) error {
|
func (w *writer) Commit(ctx context.Context, size int64, expected digest.Digest, opts ...content.Opt) error {
|
||||||
|
// Ensure even on error the writer is fully closed
|
||||||
|
defer unlock(w.ref)
|
||||||
|
|
||||||
var base content.Info
|
var base content.Info
|
||||||
for _, opt := range opts {
|
for _, opt := range opts {
|
||||||
if err := opt(&base); err != nil {
|
if err := opt(&base); err != nil {
|
||||||
@ -81,8 +84,6 @@ func (w *writer) Commit(ctx context.Context, size int64, expected digest.Digest,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure even on error the writer is fully closed
|
|
||||||
defer unlock(w.ref)
|
|
||||||
fp := w.fp
|
fp := w.fp
|
||||||
w.fp = nil
|
w.fp = nil
|
||||||
|
|
||||||
|
@ -106,14 +106,15 @@ func (s *walkingDiff) Compare(ctx context.Context, lower, upper []mount.Mount, o
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
if !newReference {
|
if !newReference {
|
||||||
if err := cw.Truncate(0); err != nil {
|
if err = cw.Truncate(0); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if isCompressed {
|
if isCompressed {
|
||||||
dgstr := digest.SHA256.Digester()
|
dgstr := digest.SHA256.Digester()
|
||||||
compressed, err := compression.CompressStream(cw, compression.Gzip)
|
var compressed io.WriteCloser
|
||||||
|
compressed, err = compression.CompressStream(cw, compression.Gzip)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "failed to get compressed stream")
|
return errors.Wrap(err, "failed to get compressed stream")
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user