@@ -743,8 +743,8 @@ func Write(ref reference.Reference, img oci.Image, w io.Writer, opts ...Option)
743743 safeWriter = & syncWriter {w : w }
744744 }
745745
746- var completed int64
747746 for _ , layer := range layers {
747+ var completed int64
748748 digest , err := layer .Digest ()
749749 if err != nil {
750750 return fmt .Errorf ("getting layer digest: %w" , err )
@@ -790,10 +790,13 @@ func Write(ref reference.Reference, img oci.Image, w io.Writer, opts ...Option)
790790 Complete : completed ,
791791 Total : size ,
792792 }
793+ closeProgress (progressChan )
794+ closeReporter (pr )
793795 }
794796 continue
795797 }
796798 closeProgress (progressChan )
799+ closeReporter (pr )
797800 return fmt .Errorf ("pushing layer: %w" , err )
798801 }
799802
@@ -808,6 +811,7 @@ func Write(ref reference.Reference, img oci.Image, w io.Writer, opts ...Option)
808811 cw .Close ()
809812 rc .Close ()
810813 closeProgress (progressChan )
814+ closeReporter (pr )
811815 return fmt .Errorf ("writing layer: %w" , err )
812816 }
813817
@@ -816,6 +820,7 @@ func Write(ref reference.Reference, img oci.Image, w io.Writer, opts ...Option)
816820 rc .Close ()
817821 if ! errdefs .IsAlreadyExists (err ) && ! strings .Contains (err .Error (), "already exists" ) {
818822 closeProgress (progressChan )
823+ closeReporter (pr )
819824 return fmt .Errorf ("committing layer: %w" , err )
820825 }
821826 // If it already exists, we still want to update progress
@@ -837,6 +842,7 @@ func Write(ref reference.Reference, img oci.Image, w io.Writer, opts ...Option)
837842 }
838843 }
839844 closeProgress (progressChan )
845+ closeReporter (pr )
840846 cw .Close ()
841847 rc .Close ()
842848 }
@@ -933,6 +939,15 @@ func closeProgress(ch chan<- oci.Update) {
933939 }
934940}
935941
942+ // closeReporter safely closes the progress reporter if not nil
943+ func closeReporter (pr * progress.Reporter ) {
944+ if pr != nil {
945+ if waitErr := pr .Wait (); waitErr != nil {
946+ fmt .Printf ("reporter finished with non-fatal error: %v\n " , waitErr )
947+ }
948+ }
949+ }
950+
936951// Ensure remoteImage is cleaned up properly
937952func (i * remoteImage ) Close () error {
938953 // The local content store doesn't expose its root path, so cleanup
0 commit comments