From ca203bff9bd278029bd2e8bec2356b37b5cb688e Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sun, 29 Jun 2025 19:18:33 -0500 Subject: [PATCH] cleanup --- esphome/components/web_server_idf/web_server_idf.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/esphome/components/web_server_idf/web_server_idf.cpp b/esphome/components/web_server_idf/web_server_idf.cpp index 01c3857367..e4ac871135 100644 --- a/esphome/components/web_server_idf/web_server_idf.cpp +++ b/esphome/components/web_server_idf/web_server_idf.cpp @@ -7,6 +7,7 @@ #include "esphome/core/log.h" #include "esp_tls_crypto.h" +#include #include "utils.h" #include "web_server_idf.h" @@ -143,7 +144,7 @@ esp_err_t AsyncWebServer::request_post_handler(httpd_req_t *r) { std::string full_boundary = "--" + boundary; ESP_LOGVV(TAG, "Initializing multipart reader with full boundary: '%s'", full_boundary.c_str()); MultipartReader reader(full_boundary); - static constexpr size_t CHUNK_SIZE = 1024; + static constexpr size_t CHUNK_SIZE = 1460; // Match Arduino AsyncWebServer buffer size // IMPORTANT: chunk_buf is reused for each chunk read from the socket. // The multipart parser will pass pointers into this buffer to callbacks. // Those pointers are only valid during the callback execution! @@ -204,6 +205,9 @@ esp_err_t AsyncWebServer::request_post_handler(httpd_req_t *r) { } }); + // Track chunks for watchdog feeding + int chunks_processed = 0; + while (remaining > 0) { size_t to_read = std::min(remaining, CHUNK_SIZE); int recv_len = httpd_req_recv(r, chunk_buf.get(), to_read); @@ -226,6 +230,12 @@ esp_err_t AsyncWebServer::request_post_handler(httpd_req_t *r) { } remaining -= recv_len; + + // Feed watchdog every 10 chunks (~14KB with 1460 byte chunks) + chunks_processed++; + if (chunks_processed % 10 == 0) { + esp_task_wdt_reset(); + } } // Final cleanup - send final signal if upload was in progress