From b1390f1679c99f42f55dc0a92b109fe307425a22 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Fri, 24 Apr 2026 02:59:03 -0500 Subject: [PATCH] [web_server_idf] Drop pre-disconnected sessions before on_connect_ If fd_ is already 0 when the main loop adopts an incoming session, the client closed before we got here. Delete the session immediately instead of pushing it into sessions_ and firing on_connect_ on a dead socket. --- esphome/components/web_server_idf/web_server_idf.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/esphome/components/web_server_idf/web_server_idf.cpp b/esphome/components/web_server_idf/web_server_idf.cpp index bb090bad408..bbaca95324d 100644 --- a/esphome/components/web_server_idf/web_server_idf.cpp +++ b/esphome/components/web_server_idf/web_server_idf.cpp @@ -503,14 +503,16 @@ bool AsyncEventSource::loop() { this->has_pending_sessions_.store(false, std::memory_order_relaxed); } for (auto *rsp : incoming) { + // Already disconnected? Drop it; skip on_connect_/prime on a dead session. + if (rsp->fd_.load() == 0) { + delete rsp; // NOLINT(cppcoreguidelines-owning-memory) + continue; + } this->sessions_.push_back(rsp); if (this->on_connect_) { this->on_connect_(rsp); } - // Already disconnected? Cleanup pass below will delete it. - if (rsp->fd_.load() != 0) { - rsp->prime_(); - } + rsp->prime_(); } }