diff --git a/esphome/components/http_request/update/http_request_update.cpp b/esphome/components/http_request/update/http_request_update.cpp index b4e9a156db9..bf6cc3448b8 100644 --- a/esphome/components/http_request/update/http_request_update.cpp +++ b/esphome/components/http_request/update/http_request_update.cpp @@ -78,6 +78,11 @@ void HttpRequestUpdate::update_task(void *params) { } else { ESP_LOGE(TAG, "Error reading manifest: %d", read_result.error_code); } + // Defer to main loop to avoid race condition on component_state_ read-modify-write + this_update->defer([this_update]() { this_update->status_set_error(LOG_STR("Failed to read manifest")); }); + allocator.deallocate(data, container->content_length); + container->end(); + UPDATE_RETURN; } size_t read_index = container->get_bytes_read();