From b47c781f2d5cecefb281c19c2df73e3dae36af7e Mon Sep 17 00:00:00 2001 From: MaPaLo76 <72209721+MaPaLo76@users.noreply.github.com> Date: Sun, 1 Mar 2026 17:52:15 +0100 Subject: [PATCH] docs: FR-011 als erledigt markiert (Commit 1ef0464, v1.4.1) --- Feature-Requests.md | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/Feature-Requests.md b/Feature-Requests.md index 108f1e7..5bc4d4f 100644 --- a/Feature-Requests.md +++ b/Feature-Requests.md @@ -19,7 +19,15 @@ Status: `[ ]` = offen · `[x]` = erledigt ## Offen -- [ ] **FR-011** Bug: PANIC/EXCEPTION durch Heap-Korruption bei MQTT-Verbindungsabbruch (TLS) +*(keine offenen Punkte)* + +--- + +## Erledigt + +### Version 1.4.1 + +- [x] **FR-011** Bug: PANIC/EXCEPTION durch Heap-Korruption bei MQTT-Verbindungsabbruch (TLS) ✅ - **Symptom**: ESP32 crasht mit `CORRUPT HEAP: Bad tail` + `assert failed: multi_heap_free` wenn der MQTT-Broker nicht erreichbar ist und eine bestehende TLS-Session unerwartet abbricht - **Fehlermeldung**: `(-76) UNKNOWN ERROR CODE (004C)` = `MBEDTLS_ERR_NET_CONN_RESET` - **Crash-Kette**: @@ -29,17 +37,12 @@ Status: `[ ]` = offen · `[x]` = erledigt 4. `mbedtls_ssl_free()` wird auf einem bereits inkonsistenten SSL-Kontext aufgerufen 5. Heap-Corruption → `multi_heap_free` assert → PANIC - **Backtrace-Frames**: `multi_heap_free` ← `heap_caps_free` ← `esp_mbedtls_mem_free` ← `mbedtls_free` ← `mbedtls_ssl_free` ← `stop_ssl_socket` ← `WiFiClientSecure::stop()` ← `WiFiClientSecure::available()` ← `WiFiClientSecure::connected()` ← `PubSubClient::connected()` ← `MqttClient::_taskLoop()` - - **Root Cause**: `WiFiClientSecure`-Objekt (`_espClient`) wird nach einem TLS-Verbindungsabbruch nicht neu erstellt — der interne mbedTLS-State ist korrupt, beim nächsten `connected()`-Aufruf crasht `mbedtls_ssl_free()` - - **Fix-Strategie**: Nach jedem fehlgeschlagenen Verbindungsversuch (`rc == -2` oder `!client->connected()`) das `WiFiClientSecure`-Objekt zerstören und neu auf Core 0 erstellen (`delete _espClient; _espClient = new WiFiClientSecure(); _espClient->setInsecure(); _client->setClient(*_espClient)`). Damit startet mbedTLS immer mit einem sauberen Kontext. - - **Reproduktion**: Broker stoppen während aktiver TLS-Session → innerhalb weniger Minuten PANIC + - **Root Cause**: `WiFiClientSecure`-Objekt wird nach einem TLS-Verbindungsabbruch nicht neu erstellt — der interne mbedTLS-State ist korrupt, beim nächsten `connected()`-Aufruf crasht `mbedtls_ssl_free()` + - **Fix**: `_rebuildClient()` — zerstört und erstellt `WiFiClientSecure`, `WiFiClient` und `PubSubClient` vor jedem Reconnect-Versuch neu auf Core 0. mbedTLS startet damit immer mit sauberem Heap-Kontext. Broker/Port werden in `_broker`/`_port` gecacht. - Betroffene Dateien: `src/mqtt_client.cpp`, `include/mqtt_client.h` - - Commit: `TODO` + - Commit: `1ef0464` - Version: 1.4.1 ---- - -## Erledigt - ### Version 1.4.0 - [x] **FR-010** Feature: Webinterface-Redesign + MQTT-Steuerung ✅