docs: FR-011 als erledigt markiert (Commit 1ef0464, v1.4.1)

This commit is contained in:
MaPaLo76 2026-03-01 17:52:15 +01:00
parent 1ef0464be9
commit b47c781f2d

View File

@ -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 ✅