From dd04cb86f30e5aadafc5ddcfe118a611ed4ab83c Mon Sep 17 00:00:00 2001 From: jpirnay Date: Sat, 23 May 2026 20:57:52 +0200 Subject: [PATCH] Fix leaked resource handles (partial PR2060) --- open-x4-sdk | 2 +- src/activities/network/CalibreConnectActivity.cpp | 3 +++ .../network/CrossPointWebServerActivity.cpp | 12 ++++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/open-x4-sdk b/open-x4-sdk index 5f4a46ea..4d4c6678 160000 --- a/open-x4-sdk +++ b/open-x4-sdk @@ -1 +1 @@ -Subproject commit 5f4a46ea3a3adeca8dd29aeb8fc023a82afdffdd +Subproject commit 4d4c66787ff655adc93a1f37811610552a73aa1c diff --git a/src/activities/network/CalibreConnectActivity.cpp b/src/activities/network/CalibreConnectActivity.cpp index 2bc5f202..7f1a9b22 100644 --- a/src/activities/network/CalibreConnectActivity.cpp +++ b/src/activities/network/CalibreConnectActivity.cpp @@ -55,6 +55,9 @@ void CalibreConnectActivity::onEnter() { void CalibreConnectActivity::onExit() { Activity::onExit(); + stopWebServer(); + MDNS.end(); + if (WiFi.getMode() != WIFI_MODE_NULL) { WiFi.disconnect(false); delay(30); diff --git a/src/activities/network/CrossPointWebServerActivity.cpp b/src/activities/network/CrossPointWebServerActivity.cpp index 5d9db36f..be94f92d 100644 --- a/src/activities/network/CrossPointWebServerActivity.cpp +++ b/src/activities/network/CrossPointWebServerActivity.cpp @@ -32,6 +32,15 @@ constexpr int QR_CODE_HEIGHT = 198; // DNS server for captive portal (redirects all DNS queries to our IP) DNSServer* dnsServer = nullptr; constexpr uint16_t DNS_PORT = 53; + +void stopDnsServer() { + if (!dnsServer) { + return; + } + dnsServer->stop(); + delete dnsServer; + dnsServer = nullptr; +} } // namespace void CrossPointWebServerActivity::onEnter() { @@ -65,6 +74,8 @@ void CrossPointWebServerActivity::onExit() { Activity::onExit(); state = WebServerActivityState::SHUTTING_DOWN; + stopDnsServer(); + MDNS.end(); // Skip reboot if WiFi was never activated (e.g. user backed out of mode selection). if (WiFi.getMode() != WIFI_MODE_NULL) { @@ -205,6 +216,7 @@ void CrossPointWebServerActivity::startAccessPoint() { // Start DNS server for captive portal behavior // This redirects all DNS queries to our IP, making any domain typed resolve to us + stopDnsServer(); dnsServer = new DNSServer(); dnsServer->setErrorReplyCode(DNSReplyCode::NoError); dnsServer->start(DNS_PORT, "*", apIP);