From fbda7cbe5e03bc5f96f143ff030a654ff452a910 Mon Sep 17 00:00:00 2001 From: Arthur Belleville Date: Fri, 15 May 2026 18:53:04 +0200 Subject: [PATCH] fix(07): CR-02 call cancel() explicitly after S3 Delete, not via defer Co-Authored-By: Claude Sonnet 4.6 (1M context) --- backend/internal/web/handlers_files.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/internal/web/handlers_files.go b/backend/internal/web/handlers_files.go index 4e3f9fe..6fd931e 100644 --- a/backend/internal/web/handlers_files.go +++ b/backend/internal/web/handlers_files.go @@ -202,10 +202,10 @@ func FileUploadHandler(deps FilesDeps) http.HandlerFunc { slog.Default().Error("files upload: InsertTabloFile failed", "tablo_id", tablo.ID, "s3_key", s3Key, "err", err) // Best-effort S3 cleanup — orphan prevention until Phase 6 reconciler exists. cleanupCtx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() if delErr := deps.Files.Delete(cleanupCtx, s3Key); delErr != nil { slog.Default().Error("files upload: S3 cleanup after DB failure", "s3_key", s3Key, "err", delErr) } + cancel() // call immediately after Delete, not via defer http.Error(w, "internal server error", http.StatusInternalServerError) return }