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 }