Repository navigation
v1.0.7
What's New
Fix: JDI thread suspension race in multi-cycle freeze (CI fix)
Fixed InvalidStackFrameException: Thread has been resumed failures that occurred across all platforms (Ubuntu, Windows, macOS) during multi-cycle freeze/restore tests.
Root cause: When the JDI connection is reused across freeze cycles (by design — vm.dispose() is not called to avoid spurious stderr output), pending events from prior cycles can race with threadRef.suspend() and resume the thread before frame data is read.
Fix (three-pronged):
- Drain pending JDI events before each suspend attempt — clears stale resume-triggering events accumulated from prior freeze/restore cycles
- Double-suspend the thread (suspend count = 2) so a single spurious resume event doesn't drop the count to 0 and allow the thread to run
- Exponential backoff with up to 10 retries (50ms → 800ms) instead of fixed 50ms × 5 attempts
Also included (from v1.0.6)
- Freeze/restore of immutable JDK types (BigDecimal, UUID, java.time.*, URI)
- Enum capture by name with
==identity preservation - Fail-fast
UncapturableTypeExceptionfor types that can't be restored correctly - Automatic class loading via JDI during cross-JVM restore
- Fixed boxed primitive restoration and latch deadlock
Testing
- 127 unit tests, 35 integration tests across Java 8/9/11/25 × Ubuntu/macOS/Windows