You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
After clicking Update in the SWG Legends launcher (post-Login), the patcher starts downloading game files, then crashes deterministically. The JVM writes an hs_err_pid*.log and the launcher process exits. Restarting the launcher and clicking Update again hits the same crash at the same address.
Reproduction
Fresh bottle via Crosswire's Install Windows App, picking SWGLegendsSetup.exe.
Engine: 11.9 from data.grubwire.io (the patched build, all 7 CW HACKs verified present in ntdll.so markers).
pc jumping to a high-address invalid memory region strongly suggests a vtable lookup on a deallocated object — likely a JavaFX scene-graph or Skin object freed by GC while still referenced from a paint callback. The patcher's UI updates (progress bar, file-list scroll) are high-frequency JavaFX paint operations, which would amplify any timing window where a freed object is touched.
Candidates:
Wine GDI bug — a GDI handle or DC freed by Wine differently than Windows expects, JavaFX's caching layer holds a stale reference, accesses it on next paint → vtable lookup at uninitialized memory.
JIT/interpreter mismatch — but we're running -Xint, so JIT is disabled. Less likely.
dwrite=builtin edge case — bug fixed the post-Login CSS-reapply crash but may not cover all DirectWrite call sites the patcher exercises.
CrossOver presumably handles this with their proprietary Wine patches. Real fix likely needs:
Compare CW Wine source (/Applications/CrossOver.app/Contents/SharedSupport/CrossOver/lib64/wine/) against Gcenx 11.9 for any GDI / dwrite / paint-loop patches we don't have.
Or build a Wine debug variant of the relevant dlls and run with WINEDEBUG=+seh,+gdi,+dwrite to capture what's being deallocated.
Class 2 in the session classification: requires Wine source research, not a quick code change. Likely days of CrossOver-vs-Gcenx diffing or upstream Wine bisection.
Evidence preserved
hs_err_pid228.log in the SWG bottle (now deleted). Crash signature can be re-captured by repeating the reproduction.
Discovered 2026-05-28 during the Checkpoint D end-to-end validation session.
Symptom
After clicking Update in the SWG Legends launcher (post-Login), the patcher starts downloading game files, then crashes deterministically. The JVM writes an
hs_err_pid*.logand the launcher process exits. Restarting the launcher and clicking Update again hits the same crash at the same address.Reproduction
SWGLegendsSetup.exe.data.grubwire.io(the patched build, all 7 CW HACKs verified present inntdll.somarkers).dwrite=builtinregistry override +_JAVA_OPTIONS=-Dprism.order=j2d -Xintplist applied (i.e., past bugs JavaAppDetector auto-plist seeding skipped: ProgramSettings.decode writes empty default first #91 + the dwrite fix), launcher renders and Login succeeds.pc=0xfffffcc8.Crash signature (from
hs_err_pid228.log)Key details:
-Xint)JavaFX Application Thread, state_thread_in_vm(inside JVM C code, not in a Java frame)pc=0xfffffcc8andEBX=0xfffffcc8— execution jumped to an invalid address near the top of 32-bit spaceESP=0xfffffb74— stack pointer also near the top, possible stack underflowEBP=0x7bf6f6ff— Wine module base address space (0x7b...range = Wine builtins)ExceptionInformation=0x00000008 0xfffffcc8— Win32 SEH: code 8 = execute violation, address =pcHypothesis
pcjumping to a high-address invalid memory region strongly suggests a vtable lookup on a deallocated object — likely a JavaFX scene-graph or Skin object freed by GC while still referenced from a paint callback. The patcher's UI updates (progress bar, file-list scroll) are high-frequency JavaFX paint operations, which would amplify any timing window where a freed object is touched.Candidates:
-Xint, so JIT is disabled. Less likely.CrossOver presumably handles this with their proprietary Wine patches. Real fix likely needs:
/Applications/CrossOver.app/Contents/SharedSupport/CrossOver/lib64/wine/) against Gcenx 11.9 for any GDI / dwrite / paint-loop patches we don't have.WINEDEBUG=+seh,+gdi,+dwriteto capture what's being deallocated.Out of scope (do not chase in the same fix)
lib/extraction issue — separate, zip-aware-install feature.Class
Class 2 in the session classification: requires Wine source research, not a quick code change. Likely days of CrossOver-vs-Gcenx diffing or upstream Wine bisection.
Evidence preserved
hs_err_pid228.login the SWG bottle (now deleted). Crash signature can be re-captured by repeating the reproduction.Discovered 2026-05-28 during the Checkpoint D end-to-end validation session.