mirror of
https://github.com/ALLFATHER-BV/wadamesh.git
synced 2026-08-17 06:49:51 +00:00
When the contact table is full, every incoming advert from an unknown node evicts the oldest contact, and onContactOverwrite() removed that contact's stored blob inline — on the mesh receive path. On a Heltec V4 the store is internal SPIFFS, where an unlink can trigger garbage collection, and SPIFFS GC suspends the flash cache: both cores stall for the duration. That is the reported symptom exactly — the whole device locks, Bluetooth and TCP drop, the screen will not wake, and it comes back on its own once GC finishes. It gets worse the fuller the table is (reports at ~350, ~600 and ~2000 contacts), and a plain V4 has no SD slot, so there is no storage-side workaround. Queue the delete instead and drain it from loop(), one blob per tick and no faster than every 500 ms, under the same WdtHeavyGuard saveContacts uses. A burst of evictions can no longer chain GC passes back to back, and a slow pass stalls briefly instead of tripping the watchdog. If the queue (8 deep) fills, the blob is left orphaned — harmless, and reclaimed on the next wipe. Reported by Yoss101 and pisti87. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>