Move NavDataLoader polling to background context (fixes app hang)#3
Merged
RISCfuture merged 2 commits intomainfrom Apr 12, 2026
Merged
Move NavDataLoader polling to background context (fixes app hang)#3RISCfuture merged 2 commits intomainfrom
RISCfuture merged 2 commits intomainfrom
Conversation
Fixes SF50-TOLD-20 (15-16s app hang) and contributes to SF50-TOLD-1X and SF50-TOLD-22 (DB on main thread). The polling loop in setupObservation() ran setAnyAirports every 500ms on container.mainContext, calling fetchNASRExpiration which also queried mainContext. During NavDataLoader batch writes, the main context's fetch blocked waiting for the persistent store coordinator lock, causing 15-16s main-thread hangs. This extracts a nonisolated fetchLoaderState(context:) helper that combines the Airport existence check and NASR expiration fetch into a value-type tuple. The polling loop now runs in Task.detached with its own ModelContext(container), reading via MVCC without blocking the main thread. Results are applied back on MainActor, skipping redundant property assignments to avoid unnecessary @observable notifications. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Moves the four nonisolated helper methods out of NavDataLoaderViewModel into a private file-scope enum. File-scope types are nonisolated by default, so the helpers become callable from both MainActor and background contexts without annotations. Also introduces a named NavDataStateHelper.State struct in place of the previous (noData, needsLoad, canSkip) tuple for self-documenting call sites. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Test plan
🤖 Generated with Claude Code