Signed-off-by: Darren Stahl <darst@microsoft.com>
| ... | ... |
@@ -779,7 +779,7 @@ func writeLayerReexec() {
|
| 779 | 779 |
} |
| 780 | 780 |
|
| 781 | 781 |
// writeLayer writes a layer from a tar file. |
| 782 |
-func writeLayer(layerData io.Reader, home string, id string, parentLayerPaths ...string) (int64, error) {
|
|
| 782 |
+func writeLayer(layerData io.Reader, home string, id string, parentLayerPaths ...string) (size int64, retErr error) {
|
|
| 783 | 783 |
err := winio.EnableProcessPrivileges([]string{winio.SeBackupPrivilege, winio.SeRestorePrivilege})
|
| 784 | 784 |
if err != nil {
|
| 785 | 785 |
return 0, err |
| ... | ... |
@@ -804,17 +804,17 @@ func writeLayer(layerData io.Reader, home string, id string, parentLayerPaths .. |
| 804 | 804 |
return 0, err |
| 805 | 805 |
} |
| 806 | 806 |
|
| 807 |
- size, err := writeLayerFromTar(layerData, w, filepath.Join(home, id)) |
|
| 808 |
- if err != nil {
|
|
| 809 |
- return 0, err |
|
| 810 |
- } |
|
| 811 |
- |
|
| 812 |
- err = w.Close() |
|
| 813 |
- if err != nil {
|
|
| 814 |
- return 0, err |
|
| 815 |
- } |
|
| 807 |
+ defer func() {
|
|
| 808 |
+ if err := w.Close(); err != nil {
|
|
| 809 |
+ // This error should not be discarded as a failure here |
|
| 810 |
+ // could result in an invalid layer on disk |
|
| 811 |
+ if retErr == nil {
|
|
| 812 |
+ retErr = err |
|
| 813 |
+ } |
|
| 814 |
+ } |
|
| 815 |
+ }() |
|
| 816 | 816 |
|
| 817 |
- return size, nil |
|
| 817 |
+ return writeLayerFromTar(layerData, w, filepath.Join(home, id)) |
|
| 818 | 818 |
} |
| 819 | 819 |
|
| 820 | 820 |
// resolveID computes the layerID information based on the given id. |