Skip to content

Commit 5b9bd99

Browse files
committed
differ: fix deadlock on commit error
Signed-off-by: Tonis Tiigi <[email protected]>
1 parent 810b3c3 commit 5b9bd99

2 files changed

Lines changed: 6 additions & 4 deletions

File tree

content/local/writer.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,15 +74,16 @@ func (w *writer) Write(p []byte) (n int, err error) {
7474
}
7575

7676
func (w *writer) Commit(ctx context.Context, size int64, expected digest.Digest, opts ...content.Opt) error {
77+
// Ensure even on error the writer is fully closed
78+
defer unlock(w.ref)
79+
7780
var base content.Info
7881
for _, opt := range opts {
7982
if err := opt(&base); err != nil {
8083
return err
8184
}
8285
}
8386

84-
// Ensure even on error the writer is fully closed
85-
defer unlock(w.ref)
8687
fp := w.fp
8788
w.fp = nil
8889

diff/walking/differ.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,14 +106,15 @@ func (s *walkingDiff) Compare(ctx context.Context, lower, upper []mount.Mount, o
106106
}
107107
}()
108108
if !newReference {
109-
if err := cw.Truncate(0); err != nil {
109+
if err = cw.Truncate(0); err != nil {
110110
return err
111111
}
112112
}
113113

114114
if isCompressed {
115115
dgstr := digest.SHA256.Digester()
116-
compressed, err := compression.CompressStream(cw, compression.Gzip)
116+
var compressed io.WriteCloser
117+
compressed, err = compression.CompressStream(cw, compression.Gzip)
117118
if err != nil {
118119
return errors.Wrap(err, "failed to get compressed stream")
119120
}

0 commit comments

Comments
 (0)