Repository navigation
Clean up suspended simulator apps after launch cancellation - #458
Merged
Merged
Conversation
Capture the app process at the request-owned simulator launcher callback, before Xcode can invalidate its launch session without recording runnablePID. Drain native work and terminate only the same stopped, untraced simulator process before releasing the workspace. Discard captures when a successful launch passes to the workspace.
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
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.
Cancelling
RunProjectwhile its simulator app is suspended can drain the native producer and return cancellation while leaving the app behind. Xcode can invalidate the launch session before assigning itsrunnablePID, so cleanup through the recorded execution tracker has no app PID to stop.Fixes #456
The simulator launch correction associates each launcher created inside a request with an object-scoped PID callback. That callback runs before Xcode records the PID on the session and captures the process's executable and start time for the owning request scope.
After native cancellation and producer drain, the scope terminates a captured app only when it still belongs to the selected simulator, has the same executable and start time, remains suspended and untraced, and has no debugger selected. Cleanup waits for process exit before releasing the workspace permit. It runs in an owned task so client cancellation cannot interrupt that wait. Successful requests discard the captures and callback hooks when the app passes to the workspace.
Validation:
./scripts/check.sh./scripts/verify-proxy-target-boundaries.sh-32800response returns, then build and launch again in the same workspace with and without LLDB. Stop and workspace close also complete.This completes the suspended-app cleanup left after the cancellation-response fix; the original reproduction and investigation are recorded in the issue.