From 1c6dd565129f39e23683744b6fc4ecc924210e97 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 11 Mar 2026 10:38:49 -1000 Subject: [PATCH] Address review feedback - Clear valid flag after logging to prevent re-logging on API reconnects - Cache esp_cpu_process_stack_pc result to avoid redundant call - Remove unused include from header --- esphome/components/esp32/crash_handler.cpp | 7 +++++-- esphome/components/esp32/crash_handler.h | 2 -- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/esphome/components/esp32/crash_handler.cpp b/esphome/components/esp32/crash_handler.cpp index a1ecca8062f..4bebef045f2 100644 --- a/esphome/components/esp32/crash_handler.cpp +++ b/esphome/components/esp32/crash_handler.cpp @@ -89,6 +89,8 @@ void crash_handler_log() { pos += snprintf(hint + pos, sizeof(hint) - pos, " 0x%08" PRIX32, s_crash_data.backtrace[i]); } ESP_LOGE(TAG, "%s", hint); + // Clear so we don't re-log on subsequent API reconnects + s_crash_data.valid = false; } } // namespace esphome::esp32 @@ -123,8 +125,9 @@ void IRAM_ATTR __wrap_esp_panic_handler(panic_info_t *info) { uint8_t count = 0; // First frame PC - if (is_code_addr(esp_cpu_process_stack_pc(bt_frame.pc))) { - s_raw_crash_data.backtrace[count++] = esp_cpu_process_stack_pc(bt_frame.pc); + uint32_t first_pc = esp_cpu_process_stack_pc(bt_frame.pc); + if (is_code_addr(first_pc)) { + s_raw_crash_data.backtrace[count++] = first_pc; } // Walk remaining frames while (count < MAX_BACKTRACE && bt_frame.next_pc != 0) { diff --git a/esphome/components/esp32/crash_handler.h b/esphome/components/esp32/crash_handler.h index 39a764e8042..c2c42c4ffd2 100644 --- a/esphome/components/esp32/crash_handler.h +++ b/esphome/components/esp32/crash_handler.h @@ -2,8 +2,6 @@ #ifdef USE_ESP32 -#include - namespace esphome::esp32 { /// Read crash data from NOINIT memory and clear the magic marker.