docs: FR-011 als erledigt markiert (Commit 1ef0464, v1.4.1)
This commit is contained in:
parent
1ef0464be9
commit
b47c781f2d
|
|
@ -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 ✅
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user