ed11d2cd45
On Apple (iOS/macOS) and Linux targets, LargeCache.forEach() iterates the underlying map directly. When another coroutine modifies the map during iteration (e.g., NostrClient.syncFilters running while subscriptions are added), a ConcurrentModificationException is thrown. On JVM/Android this is not an issue because ConcurrentSkipListMap handles concurrent iteration safely. On Kotlin/Native (iOS), this exception is fatal — K/N calls abort() for unhandled exceptions, crashing the app immediately after account creation when relays connect and subscriptions start syncing. Fix: call .entries.toList() before iterating to create a snapshot, matching the JVM behavior where concurrent modifications during iteration are tolerated.