You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
TCP: toggling TCP connections in Settings crashed the device with a double-free/use-after-free. retireTCPClient() called delete on a raw pointer already owned by RNS::Interface's shared_ptr; teardown then freed it a second time. Fixed by letting tcpIfaces.clear() be the sole destructor.
TCP:TCPClientInterface::stop() returned early when WiFi dropped while a connect task was still in flight, leaving the task alive with a dangling self pointer. If the destructor ran first, the task's subsequent _connectState write hit freed memory. Fixed by always waiting for the connect task; ESP32 lwIP aborts pending sockets within milliseconds of network loss.
TCP: a reloaded TCPClientInterface inherited stale HDLC frame state, hub transport ID, and reconnect backoff from its previous run. start() now resets all per-connection state. A re-announce fires 4 s after new clients are created so the hub learns our address on the fresh connection.
Names: non-contact peer names disappeared after every reboot. Three interlocking bugs: (1) no priority tracking — TCP hub announces could fill the 60-entry on-disk cap, displacing peers we'd actually messaged; (2) eviction race — the RAM guard could evict a name before the first message exchange marked it persistent, with no recovery path; (3) missing dirty flag — if the 5 s save timer fired before a message exchange, markNamePersistent returned early without scheduling a re-save, so the entry was never promoted to a guaranteed slot. All three fixed.
Names:lookupName() short-circuited on the 12-char placeholder assigned by notePeerInterface() when a peer messages us before ever announcing, blocking recall_app_data() from returning their real display name.
Stamps: stamp computation could grind forever or crash on high proof-of-work costs. Added STAMP_HARD_MAX=16 (hard reject above ESP32-S3 feasibility ceiling), a 30 s abort timeout, and try/catch OOM protection in the stamp task. Stack doubled to 8 KB. UserConfig ceiling clamped to 1–16.
Added
UI: "Show Address" in the Peers tab action menu and Messages tab context menu — displays the peer's full 32-char LXMF destination hash as two formatted lines for identity verification against spoofing.
Changed
Settings: WiFi mode and Auto LAN changes now chain a "Reboot now / Later" popup immediately after saving instead of showing an easily-missed toast.
Peers: non-contact peers sorted by most-recently-heard time (active nodes float to the top); saved contacts keep alphabetical order.