From a7f04a6cf991fe366a01a1b9064eea0f195c07be Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 9 Feb 2026 09:25:05 -0600 Subject: [PATCH 1/4] Remove redundant early guard --- esphome/components/ld2420/ld2420.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/esphome/components/ld2420/ld2420.cpp b/esphome/components/ld2420/ld2420.cpp index 2fdc73ebb2..5f919b0759 100644 --- a/esphome/components/ld2420/ld2420.cpp +++ b/esphome/components/ld2420/ld2420.cpp @@ -541,14 +541,8 @@ void LD2420Component::handle_simple_mode_(const uint8_t *inbuf, int len) { } void LD2420Component::read_batch_(std::span buffer) { - // 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 a9029fb67ae6a4b2f555e131c6c3451296a976cf Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 9 Feb 2026 09:27:05 -0600 Subject: [PATCH 2/4] Keep early guard to avoid stack buffer allocation --- esphome/components/ld2420/ld2420.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/esphome/components/ld2420/ld2420.cpp b/esphome/components/ld2420/ld2420.cpp index 5f919b0759..f775876f59 100644 --- a/esphome/components/ld2420/ld2420.cpp +++ b/esphome/components/ld2420/ld2420.cpp @@ -541,8 +541,12 @@ void LD2420Component::handle_simple_mode_(const uint8_t *inbuf, int len) { } void LD2420Component::read_batch_(std::span buffer) { - // 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 1f1405364dc6a7fbee7c5ad6d5cf7af168b72bc0 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 9 Feb 2026 09:29:25 -0600 Subject: [PATCH 3/4] Add comment explaining early guard --- esphome/components/ld2420/ld2420.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/esphome/components/ld2420/ld2420.cpp b/esphome/components/ld2420/ld2420.cpp index f775876f59..253599fadb 100644 --- a/esphome/components/ld2420/ld2420.cpp +++ b/esphome/components/ld2420/ld2420.cpp @@ -541,6 +541,8 @@ void LD2420Component::handle_simple_mode_(const uint8_t *inbuf, int len) { } void LD2420Component::read_batch_(std::span buffer) { + // 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 04f4636d36fd6e5cf396171c2da06310fc8bb3f7 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 9 Feb 2026 09:38:47 -0600 Subject: [PATCH 4/4] Remove unnecessary early guard --- esphome/components/ld2420/ld2420.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/esphome/components/ld2420/ld2420.cpp b/esphome/components/ld2420/ld2420.cpp index 253599fadb..5f919b0759 100644 --- a/esphome/components/ld2420/ld2420.cpp +++ b/esphome/components/ld2420/ld2420.cpp @@ -541,14 +541,8 @@ void LD2420Component::handle_simple_mode_(const uint8_t *inbuf, int len) { } void LD2420Component::read_batch_(std::span buffer) { - // 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));