Skip to content

v1.0.7

Choose a tag to compare

@hooji hooji released this 22 Mar 19:38
· 153 commits to main since this release
81b0bd6

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):

  1. Drain pending JDI events before each suspend attempt — clears stale resume-triggering events accumulated from prior freeze/restore cycles
  2. 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
  3. 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 UncapturableTypeException for 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