Repository navigation
Fix concurrent parenthesis index crash and duplicate shutdown handler - #189
Merged
Merged
Conversation
Serialise GetOrBuildParenthesisIndex so concurrent UI and live-tracking workers cannot corrupt the static dictionary. Add a concurrent stress test, log and continue on live-tracking worker failures, and run desktop shutdown handlers only once when Avalonia fires duplicate ShutdownRequested events.
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
Fixes the v1.1.4 fatal crash from Carlos’s log (
InvalidOperationExceptioninSatelliteCatalogMatching.GetOrBuildParenthesisIndexat 17:37:31 +01:00), plus a duplicateShutdownRequestedshutdown crash seen at 20:26:00.Root cause (catalog matching)
GetOrBuildParenthesisIndexkept a staticDictionaryand rebuilt it in place with no synchronisation.TleService.GetEnabledSatellitesallocates a newHashSeton every call, so the reference-equality cache almost never hits and many threads rebuild at once (live tracking worker, UI status refresh, satellite picker, sunlight prediction, etc.). Interleaved writers could mutate the same dictionary instance and trigger the runtime’s “exclusive access” failure.Fix
SatelliteCatalogMatchingConcurrencyTests(16 threads × 500 iterations, fresh name sets per call).ObjectDisposedExceptionif the service provider is already torn down (Avalonia firedShutdownRequestedtwice in the attached log).Docs (IC-9700 CI-V address)
Operator docs for https://oscarwatch.org/docs are not in this repository (they live in the OscarWatch website repo per project rules). This tracker repo already documents the correct default (
A2) inRigSettings.DefaultCivAddressForandSettings.Radio.CivHint. No doc change here; the Icom page on the site should be corrected separately.Test plan
dotnet build OscarWatch.slnx -c Releasedotnet test OscarWatch.Tests/OscarWatch.Tests.csproj -c Release(3398 passed, including new concurrency test)