Skip to content

Take libpalaso 18, which recovers an abandoned SLDR mutex - #10

Open
johnml1135 wants to merge 2 commits into
mainfrom
fix/libpalaso-18-sldr-mutex
Open

johnml1135 wants to merge 2 commits into
mainfrom
fix/libpalaso-18-sldr-mutex

Conversation

@johnml1135

Copy link
Copy Markdown
Collaborator

A process killed while holding libpalaso's machine-wide SldrCache mutex made every later writing-system load on the machine fail with AbandonedMutexException — Motif's, and FieldWorks' too — until something took and released it. One run of our suite lost 445 tests to it. libpalaso fixed it in sillsdev/libpalaso#1544 (LT-21834), shipped in SIL.Core/SIL.WritingSystems 18.0.0-beta0042; this takes that release.

What changes

  • SilVersions.props pins libpalaso 18.0.0-beta0042. SIL.LCModel (even 11.0.0-beta0182) still asks for 17.x, so the SIL.Core/SIL.WritingSystems pins in five projects are now unconditional instead of applying only under the local-libpalaso override.
  • AbandonedSldrMutexTests pins the new behaviour: it abandons a privately named GlobalMutex and takes it again. It fails on 17.0.0-beta0097 with AbandonedMutexException and passes on 18.0.0-beta0042. It uses a private name on purpose — abandoning the real SldrCache mutex hangs any other process still on 17.
  • AGENTS.md says why the pin sits above what LCModel asks for.
Evidence and risk
  • ./test.ps1 -Configuration Release: 2,021 passed, 0 failed, 40 skipped.
  • Risk: 18 is a major version above LCModel's dependency. libpalaso's major bump came from SIL.Windows.Forms (ImageCropper, +semver:major Fix unusable ImageCropper crop; RawFormat now MemoryBmp libpalaso#1530), which Motif does not reference; the full suite is the compatibility evidence.
  • libpalaso 18 also writes the SLDR cache and the writing-system store atomically, so an interrupted write no longer leaves a truncated file.

🤖 Generated with Claude Code

johnml1135 and others added 2 commits September 24, 2026 15:49
libpalaso's GlobalMutex let AbandonedMutexException escape, so a process
killed while holding the machine-wide SldrCache mutex broke every later
writing-system load on the machine, FieldWorks' included: one run of the
suite lost 445 tests to it. SIL.Core/SIL.WritingSystems 18.0.0-beta0042
carries libpalaso #1544 (LT-21834), which recovers from the abandonment
and replaces the SLDR cache and writing-system files atomically.

SIL.LCModel still asks for libpalaso 17, so the pins are now direct
rather than only active under a local override. A test pins the new
behaviour: it fails on 17.0.0-beta0097 and passes on 18.0.0-beta0042.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant