From 03fb8e8ce18d814135a12656d6a2610abc5f615e Mon Sep 17 00:00:00 2001 From: jpirnay Date: Mon, 4 May 2026 11:07:38 +0200 Subject: [PATCH] Restart on webserver exit to regain memory --- src/activities/network/CrossPointWebServerActivity.cpp | 7 +++++++ src/activities/network/CrossPointWebServerActivity.h | 3 +++ 2 files changed, 10 insertions(+) diff --git a/src/activities/network/CrossPointWebServerActivity.cpp b/src/activities/network/CrossPointWebServerActivity.cpp index 335cd0f4..e4897b6d 100644 --- a/src/activities/network/CrossPointWebServerActivity.cpp +++ b/src/activities/network/CrossPointWebServerActivity.cpp @@ -43,6 +43,7 @@ void CrossPointWebServerActivity::onEnter() { state = WebServerActivityState::MODE_SELECTION; networkMode = NetworkMode::JOIN_NETWORK; isApMode = false; + webServerStarted = false; connectedIP.clear(); connectedSSID.clear(); lastHandleClientTime = 0; @@ -97,6 +98,11 @@ void CrossPointWebServerActivity::onExit() { LOG_DBG("WEBACT", "Free heap at onExit end: %d bytes", ESP.getFreeHeap()); requestUpdate(); + + if (webServerStarted) { + LOG_DBG("WEBACT", "Restarting device after webserver exit to regain heap..."); + ESP.restart(); + } } void CrossPointWebServerActivity::onNetworkModeSelected(const NetworkMode mode) { @@ -245,6 +251,7 @@ void CrossPointWebServerActivity::startWebServer() { webServer->begin(); if (webServer->isRunning()) { + webServerStarted = true; state = WebServerActivityState::SERVER_RUNNING; if (!isApMode) { currentRssi = WiFi.RSSI(); diff --git a/src/activities/network/CrossPointWebServerActivity.h b/src/activities/network/CrossPointWebServerActivity.h index ed8c11f9..51b66b68 100644 --- a/src/activities/network/CrossPointWebServerActivity.h +++ b/src/activities/network/CrossPointWebServerActivity.h @@ -34,6 +34,9 @@ class CrossPointWebServerActivity final : public Activity { NetworkMode networkMode = NetworkMode::JOIN_NETWORK; bool isApMode = false; + // Track whether the web server was started during this activity. + bool webServerStarted = false; + // Web server - owned by this activity std::unique_ptr webServer;