Skip to content

fix: Shared compiler shutdown no longer leaves worker processes running#1631

Merged
hatayama merged 2 commits into
v3-betafrom
fix/hatayama/harden-shared-roslyn-worker-shutdown
Jul 8, 2026
Merged

fix: Shared compiler shutdown no longer leaves worker processes running#1631
hatayama merged 2 commits into
v3-betafrom
fix/hatayama/harden-shared-roslyn-worker-shutdown

Conversation

@hatayama

@hatayama hatayama commented Jul 8, 2026

Copy link
Copy Markdown
Owner

Summary

  • Shared compiler shutdown now reaches forced termination even when the graceful quit channel is broken.
  • Operating-system termination failures are logged while final process disposal still completes.

User Impact

  • Previously, an input-stream failure during Editor reload or quit could skip the kill fallback and leave the shared compiler worker running after the package forgot it.
  • Shutdown now treats graceful quit and forced termination as separate best-effort phases, reducing orphaned worker processes without changing normal compilation behavior.

Changes

  • Split shared worker shutdown into independently guarded graceful and forced termination phases.
  • Keep HasExited checks inside each phase's exception boundary and catch only documented, reachable process-operation failures.
  • Treat exit-code lookup failures as an unknown state that still requires forced termination, while skipping kill when no process is associated.
  • Preserve exactly-once process disposal with a shared finally block.
  • Add process-free state-transition tests for broken and disposed quit channels, kill failures, successful graceful exit, and already-exited processes.
  • Keep the shared compiler wire format and protocol version unchanged.

Verification

  • Before the fix, the five focused tests produced the expected TDD result: three failures for skipped kill fallback and escaping Win32Exception, with the two normal-path characterization tests passing.
  • dist/darwin-arm64/uloop compile (0 errors, 0 warnings)
  • Focused shutdown workflow tests (7 passed)
  • SharedRoslynCompilerWorkerHostTests and StaticFacadeStateGuardTests (43 passed)
  • git diff --check

Separate graceful shutdown from forced termination so broken input channels
cannot skip the kill fallback. Log documented process termination failures,
always dispose the owned process, and cover each shutdown path with process-free
state-transition tests.
@coderabbitai

coderabbitai Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

@hatayama, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 14 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: c14b4eca-5222-4935-81de-30210083a21b

📥 Commits

Reviewing files that changed from the base of the PR and between 8f11be5 and 6cbedfc.

📒 Files selected for processing (2)
  • Assets/Tests/Editor/DynamicCodeToolTests/SharedRoslynCompilerWorkerHostTests.cs
  • Packages/src/Editor/FirstPartyTools/ExecuteDynamicCode/DynamicCompilation/SharedRoslynCompilerWorkerSession.cs
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/hatayama/harden-shared-roslyn-worker-shutdown

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed across 2 files

You’re at about 94% of the monthly reviewed-line limit. You may want to disable incremental reviews to conserve quota. Reviews will continue until that limit is exceeded. If you need help avoiding interruptions, please contact contact@cubic.dev.

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

Treat Win32 exit-code lookup failures as an unknown process state and still
attempt forced termination, while preserving the no-process behavior for
InvalidOperationException. Cover both query outcomes with process-free tests.
@hatayama
hatayama merged commit 9b2bf86 into v3-beta Jul 8, 2026
10 checks passed
@hatayama
hatayama deleted the fix/hatayama/harden-shared-roslyn-worker-shutdown branch July 8, 2026 18:33
@github-actions github-actions Bot mentioned this pull request Jul 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant