From dfb0c8670df0abdb9cb0c2d73420f479ed7ae760 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 9 Feb 2026 09:24:34 -0600 Subject: [PATCH 1/4] Remove redundant early guard --- esphome/components/ld2412/ld2412.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/esphome/components/ld2412/ld2412.cpp b/esphome/components/ld2412/ld2412.cpp index 972229b7c8..f8ceee78eb 100644 --- a/esphome/components/ld2412/ld2412.cpp +++ b/esphome/components/ld2412/ld2412.cpp @@ -310,14 +310,8 @@ void LD2412Component::restart_and_read_all_info() { } void LD2412Component::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 2784059a646587a00bb623dfd94e4f048378a4a5 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 9 Feb 2026 09:26:29 -0600 Subject: [PATCH 2/4] Keep early guard to avoid stack buffer allocation --- esphome/components/ld2412/ld2412.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/esphome/components/ld2412/ld2412.cpp b/esphome/components/ld2412/ld2412.cpp index f8ceee78eb..a4099c45b1 100644 --- a/esphome/components/ld2412/ld2412.cpp +++ b/esphome/components/ld2412/ld2412.cpp @@ -310,8 +310,12 @@ void LD2412Component::restart_and_read_all_info() { } void LD2412Component::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 59a2f6f5380bfda7b43e118e2cb4ac24779f1142 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 9 Feb 2026 09:28:51 -0600 Subject: [PATCH 3/4] Add comment explaining early guard --- esphome/components/ld2412/ld2412.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/esphome/components/ld2412/ld2412.cpp b/esphome/components/ld2412/ld2412.cpp index a4099c45b1..1deb0075a6 100644 --- a/esphome/components/ld2412/ld2412.cpp +++ b/esphome/components/ld2412/ld2412.cpp @@ -310,6 +310,8 @@ void LD2412Component::restart_and_read_all_info() { } void LD2412Component::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 277a11f0eae7a34b5322cbbdc6e5667dd85fa671 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 9 Feb 2026 09:38:12 -0600 Subject: [PATCH 4/4] Remove unnecessary early guard --- esphome/components/ld2412/ld2412.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/esphome/components/ld2412/ld2412.cpp b/esphome/components/ld2412/ld2412.cpp index 1deb0075a6..f8ceee78eb 100644 --- a/esphome/components/ld2412/ld2412.cpp +++ b/esphome/components/ld2412/ld2412.cpp @@ -310,14 +310,8 @@ void LD2412Component::restart_and_read_all_info() { } void LD2412Component::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));