From 7ddf51bb5190a35da339855d9661c40269eec54d Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sat, 14 Jun 2025 22:36:29 -0500 Subject: [PATCH 1/3] fix --- esphome/core/application.cpp | 5 +++++ esphome/core/scheduler.cpp | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/esphome/core/application.cpp b/esphome/core/application.cpp index 4ed96f7300..9dda32f0e6 100644 --- a/esphome/core/application.cpp +++ b/esphome/core/application.cpp @@ -98,6 +98,11 @@ void Application::loop() { this->feed_wdt(last_op_end_time); for (Component *component : this->looping_components_) { + // Skip components that are done or failed + if (component->should_skip_loop()) { + continue; + } + // Update the cached time before each component runs this->loop_component_start_time_ = last_op_end_time; diff --git a/esphome/core/scheduler.cpp b/esphome/core/scheduler.cpp index 7d91241c72..eed222c974 100644 --- a/esphome/core/scheduler.cpp +++ b/esphome/core/scheduler.cpp @@ -211,8 +211,8 @@ void HOT Scheduler::call() { // Not reached timeout yet, done for this call break; } - // Don't run on failed or loop-done components - if (item->component != nullptr && item->component->should_skip_loop()) { + // Don't run on failed components + if (item->component != nullptr && item->component->is_failed()) { LockGuard guard{this->lock_}; this->pop_raw_(); continue; From e31c7b7dfcd0ea4cd472021100cfd367ca96f354 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sat, 14 Jun 2025 23:15:06 -0500 Subject: [PATCH 2/3] one more --- esphome/components/captive_portal/captive_portal.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/esphome/components/captive_portal/captive_portal.h b/esphome/components/captive_portal/captive_portal.h index 24d1295e6a..6b90e27edf 100644 --- a/esphome/components/captive_portal/captive_portal.h +++ b/esphome/components/captive_portal/captive_portal.h @@ -35,6 +35,8 @@ class CaptivePortal : public AsyncWebHandler, public Component { this->dns_server_->stop(); this->dns_server_ = nullptr; #endif + // Mark loop as done since we no longer need to process DNS requests + this->mark_loop_done(); } bool canHandle(AsyncWebServerRequest *request) override { From a0cd72de28f59ce93d423605e2fe7c9dc1a66992 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Sat, 14 Jun 2025 23:19:43 -0500 Subject: [PATCH 3/3] revert --- esphome/components/captive_portal/captive_portal.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/esphome/components/captive_portal/captive_portal.h b/esphome/components/captive_portal/captive_portal.h index 6b90e27edf..24d1295e6a 100644 --- a/esphome/components/captive_portal/captive_portal.h +++ b/esphome/components/captive_portal/captive_portal.h @@ -35,8 +35,6 @@ class CaptivePortal : public AsyncWebHandler, public Component { this->dns_server_->stop(); this->dns_server_ = nullptr; #endif - // Mark loop as done since we no longer need to process DNS requests - this->mark_loop_done(); } bool canHandle(AsyncWebServerRequest *request) override {