From 53bde863f51379e867c45d41b4cc0b6ef96693b4 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 9 Feb 2026 09:24:50 -0600 Subject: [PATCH 1/4] Remove redundant early guard --- esphome/components/ld2410/ld2410.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/esphome/components/ld2410/ld2410.cpp b/esphome/components/ld2410/ld2410.cpp index c57d3f7cf7..b57b1d9978 100644 --- a/esphome/components/ld2410/ld2410.cpp +++ b/esphome/components/ld2410/ld2410.cpp @@ -275,14 +275,8 @@ void LD2410Component::restart_and_read_all_info() { } void LD2410Component::loop() { - // All current UART available() implementations return >= 0, - // use <= 0 to future-proof against any that may return negative on error. - int avail = this->available(); - if (avail <= 0) { - return; - } - // Read all available bytes in batches to reduce UART call overhead. + int avail = this->available(); uint8_t buf[MAX_LINE_LENGTH]; while (avail > 0) { size_t to_read = std::min(static_cast(avail), sizeof(buf)); From cd891d4b1603679ad9a3d0def3ed94235d655e77 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 9 Feb 2026 09:26:50 -0600 Subject: [PATCH 2/4] Keep early guard to avoid stack buffer allocation --- esphome/components/ld2410/ld2410.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/esphome/components/ld2410/ld2410.cpp b/esphome/components/ld2410/ld2410.cpp index b57b1d9978..682582b052 100644 --- a/esphome/components/ld2410/ld2410.cpp +++ b/esphome/components/ld2410/ld2410.cpp @@ -275,8 +275,12 @@ void LD2410Component::restart_and_read_all_info() { } void LD2410Component::loop() { - // Read all available bytes in batches to reduce UART call overhead. int avail = this->available(); + if (avail <= 0) { + return; + } + + // Read all available bytes in batches to reduce UART call overhead. uint8_t buf[MAX_LINE_LENGTH]; while (avail > 0) { size_t to_read = std::min(static_cast(avail), sizeof(buf)); From 5d3ae8cbecceac601e7f3d03d9d00b7bf7cef09a Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 9 Feb 2026 09:29:07 -0600 Subject: [PATCH 3/4] Add comment explaining early guard --- esphome/components/ld2410/ld2410.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/esphome/components/ld2410/ld2410.cpp b/esphome/components/ld2410/ld2410.cpp index 682582b052..0a053b7f06 100644 --- a/esphome/components/ld2410/ld2410.cpp +++ b/esphome/components/ld2410/ld2410.cpp @@ -275,6 +275,8 @@ void LD2410Component::restart_and_read_all_info() { } void LD2410Component::loop() { + // Early return avoids stack adjustment for the batch buffer below. + // loop() runs ~7000/min so most calls have nothing to read. int avail = this->available(); if (avail <= 0) { return; From 3cbadfe42aa9224d49602586f3c3f8554b35dc4a Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 9 Feb 2026 09:38:30 -0600 Subject: [PATCH 4/4] Remove unnecessary early guard --- esphome/components/ld2410/ld2410.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/esphome/components/ld2410/ld2410.cpp b/esphome/components/ld2410/ld2410.cpp index 0a053b7f06..b57b1d9978 100644 --- a/esphome/components/ld2410/ld2410.cpp +++ b/esphome/components/ld2410/ld2410.cpp @@ -275,14 +275,8 @@ void LD2410Component::restart_and_read_all_info() { } void LD2410Component::loop() { - // Early return avoids stack adjustment for the batch buffer below. - // loop() runs ~7000/min so most calls have nothing to read. - int avail = this->available(); - if (avail <= 0) { - return; - } - // Read all available bytes in batches to reduce UART call overhead. + int avail = this->available(); uint8_t buf[MAX_LINE_LENGTH]; while (avail > 0) { size_t to_read = std::min(static_cast(avail), sizeof(buf));