From d32db7904a9f53dd697d5e8504dee1d2da968cef Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 23 Apr 2026 20:40:38 -0500 Subject: [PATCH] [mdns] Inline MDNS.update() as a lambda in each platform's start_polling_window_ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drops the mdns_pump_update() trampoline. It existed because start_polling_window_ lived in mdns_component.cpp which can't see the platform's MDNS global. Moving start_polling_window_ into each platform cpp lets the set_interval lambda call MDNS.update() directly — no forward decl, no ODR comment, no indirection. --- esphome/components/mdns/mdns_component.cpp | 9 --------- esphome/components/mdns/mdns_component.h | 6 ------ esphome/components/mdns/mdns_esp8266.cpp | 6 +++++- esphome/components/mdns/mdns_rp2040.cpp | 6 +++++- 4 files changed, 10 insertions(+), 17 deletions(-) diff --git a/esphome/components/mdns/mdns_component.cpp b/esphome/components/mdns/mdns_component.cpp index 80e12ade71..e05373ac5d 100644 --- a/esphome/components/mdns/mdns_component.cpp +++ b/esphome/components/mdns/mdns_component.cpp @@ -190,15 +190,6 @@ void MDNSComponent::compile_records_(StaticVectorset_interval(MDNS_POLL_ID, MDNS_UPDATE_INTERVAL_MS, mdns_pump_update); - this->set_timeout(MDNS_POLL_STOP_ID, MDNS_POLL_WINDOW_MS, [this]() { this->cancel_interval(MDNS_POLL_ID); }); -} -#endif - void MDNSComponent::dump_config() { ESP_LOGCONFIG(TAG, "mDNS:\n" diff --git a/esphome/components/mdns/mdns_component.h b/esphome/components/mdns/mdns_component.h index 95bf2bf27f..4f651f7d84 100644 --- a/esphome/components/mdns/mdns_component.h +++ b/esphome/components/mdns/mdns_component.h @@ -24,12 +24,6 @@ namespace esphome::mdns { -#ifdef USE_MDNS_EVENT_DRIVEN_POLLING -/// MDNS.update() trampoline. Defined in exactly one mdns_.cpp per build -/// (FILTER_SOURCE_FILES in __init__.py enforces this), so ODR is preserved. -void mdns_pump_update(); -#endif - // Helper struct that identifies strings that may be stored in flash storage (similar to LogString) struct MDNSString; diff --git a/esphome/components/mdns/mdns_esp8266.cpp b/esphome/components/mdns/mdns_esp8266.cpp index d77d9685dd..95137ea116 100644 --- a/esphome/components/mdns/mdns_esp8266.cpp +++ b/esphome/components/mdns/mdns_esp8266.cpp @@ -39,7 +39,11 @@ static void register_esp8266(MDNSComponent *, StaticVectorset_interval(MDNS_POLL_ID, MDNS_UPDATE_INTERVAL_MS, []() { MDNS.update(); }); + this->set_timeout(MDNS_POLL_STOP_ID, MDNS_POLL_WINDOW_MS, [this]() { this->cancel_interval(MDNS_POLL_ID); }); +} #endif void MDNSComponent::setup() { diff --git a/esphome/components/mdns/mdns_rp2040.cpp b/esphome/components/mdns/mdns_rp2040.cpp index a8b0af4ad6..f5848893a3 100644 --- a/esphome/components/mdns/mdns_rp2040.cpp +++ b/esphome/components/mdns/mdns_rp2040.cpp @@ -39,7 +39,11 @@ static void register_rp2040(MDNSComponent *, StaticVectorset_interval(MDNS_POLL_ID, MDNS_UPDATE_INTERVAL_MS, []() { MDNS.update(); }); + this->set_timeout(MDNS_POLL_STOP_ID, MDNS_POLL_WINDOW_MS, [this]() { this->cancel_interval(MDNS_POLL_ID); }); +} #endif void MDNSComponent::setup() {