Repository navigation
Fix GAR cleanup and bridge startup races - #17
Merged
Merged
Conversation
toratako
marked this pull request as ready for review
October 2, 2026 16:44
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.
GAR snapshot validation opened a writable Ghidra project, starting database cleanup that could outlive
close()and race archive traversal or restore publication. Inspect snapshots read-only without resetting ownership. Native archive and external-link test helpers also avoid starting cleanup on their closed sources.Bridge startup now stages and publishes its provisional launcher PID without overwriting an existing file. A parent resumed after Java has published its authoritative PID can no longer replace it with the launcher PID, including while Java's file is still empty.
The GAR regression models the cleanup scratch-file lifetime with latches at the writable-inspection boundary and checks that genuine missing project data still fails. It reuses the existing interoperability test's JVM. Both GAR and PID regressions failed before their fixes and passed afterwards. The queue-drain test now waits for the acknowledged JVM to exit before teardown, removing an observed 60-second redundant connection retry. No additional JVM startups or suite serialization were added.
CI's Rust 1.99 also flagged an existing redundant closure borrow in JAR validation. Remove that borrow; all 25 installation tests and local clippy pass.
Local validation on Linux with Ghidra 12.1.2:
All 25 PR checks passed at
6e7e3a8, including native Linux, Windows, and macOS tests with Ghidra 12.1.3 / Java 21, plus lint and dependency audit. The native CI run passed project/GAR interoperability, daemon (55 tests per OS), read-only and mutation integration, and standalone JAR coverage. Logs confirm that the GAR snapshot regression and queue-drain shutdown test ran successfully on all three OSes.Ghidra 11 API compatibility was checked against its tagged source; it was not run locally.
Fixes #16.