From ec8c0a50c2e4825e4ca75375ba13f55d2c7295a9 Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Wed, 16 Jul 2025 15:23:52 +0200 Subject: [PATCH] fix: ignore "Close" error when uploading container blob (#8527) https://github.com/go-gitea/gitea/pull/34620/files (cherry picked from commit 7a59f5a8253402d6f98234bf0047ec53156d3af9) ## Testing Ask @viceice to run the reproducer in his environment once the v12 backport lands Co-authored-by: wxiaoguang Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8527 Reviewed-by: Michael Kriese --- routers/api/packages/container/container.go | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/routers/api/packages/container/container.go b/routers/api/packages/container/container.go index 191a4aa455..9a7fd03aa8 100644 --- a/routers/api/packages/container/container.go +++ b/routers/api/packages/container/container.go @@ -399,12 +399,7 @@ func EndUploadBlob(ctx *context.Context) { } return } - doClose := true - defer func() { - if doClose { - uploader.Close() - } - }() + defer uploader.Close() if ctx.Req.Body != nil { if err := uploader.Append(ctx, ctx.Req.Body); err != nil { @@ -437,11 +432,10 @@ func EndUploadBlob(ctx *context.Context) { return } - if err := uploader.Close(); err != nil { - apiError(ctx, http.StatusInternalServerError, err) - return - } - doClose = false + // There was a strange bug: the "Close" fails with error "close .../tmp/package-upload/....: file already closed" + // AFAIK there should be no other "Close" call to the uploader between NewBlobUploader and this line. + // At least it's safe to call Close twice, so ignore the error. + _ = uploader.Close() if err := container_service.RemoveBlobUploadByID(ctx, uploader.ID); err != nil { apiError(ctx, http.StatusInternalServerError, err)