Skip to content

fix(app-server): speed up shutdown#23578

Merged
fcoury-oai merged 7 commits into
mainfrom
fcoury/fix-slow-shutdown
May 20, 2026
Merged

fix(app-server): speed up shutdown#23578
fcoury-oai merged 7 commits into
mainfrom
fcoury/fix-slow-shutdown

Conversation

@fcoury-oai
Copy link
Copy Markdown
Contributor

@fcoury-oai fcoury-oai commented May 19, 2026

Why

Pressing Ctrl+C or Ctrl+D in the TUI could make Codex pause during shutdown when app-server background work still held outbound sender clones.

Shutdown tracing against the current ~/.codex path found three relevant holders:

  • SkillsWatcher kept its event-loop task alive until the shutdown timeout path.
  • AppServerAttestationProvider retained a strong Arc<OutgoingMessageSender>, which could keep outbound teardown waiting after the processor task had exited.
  • A background apps/list task could still own an outbound sender when shutdown began, causing the in-process app-server runtime to wait for its outbound channel to close.

What Changed

  • Give SkillsWatcher an explicit shutdown CancellationToken and cancel it from app-server teardown so its event loop drops the outbound sender promptly.
  • Change AppServerAttestationProvider to keep a Weak<OutgoingMessageSender> and return immediately when it can no longer be upgraded.
  • Give AppsRequestProcessor a shutdown CancellationToken and cancel in-flight background apps/list work during teardown.

How to Test

  1. Start Codex TUI from a real home configuration.
  2. Press Ctrl+C.
  3. Confirm Codex exits promptly instead of pausing during shutdown.
  4. Repeat with Ctrl+D and confirm the same prompt exit path.

Focused manual trace validation from the investigation:

  • Before the full fix, reproduced shutdown traces showed outbound teardown waiting on lingering owners, including attestation.provider=1 and later apps.list.task=1.
  • After the fix, fresh real-home Ctrl+D traces showed app_server.runtime.outbound_state_after_processor_join with owners=none, app_server.runtime.wait_outbound_handle = 0ms, and total TUI app-server shutdown around 18ms.

Targeted validation:

  • RUST_MIN_STACK=8388608 cargo test -p codex-app-server

Comment thread codex-rs/app-server/src/attestation.rs Outdated
Comment thread codex-rs/app-server/src/skills_watcher.rs Outdated
Comment thread codex-rs/app-server/src/request_processors/apps_processor.rs
Comment thread codex-rs/app-server/src/skills_watcher.rs
@fcoury-oai fcoury-oai enabled auto-merge (squash) May 20, 2026 17:27
@fcoury-oai fcoury-oai merged commit 050a2e2 into main May 20, 2026
31 checks passed
@fcoury-oai fcoury-oai deleted the fcoury/fix-slow-shutdown branch May 20, 2026 17:30
@github-actions github-actions Bot locked and limited conversation to collaborators May 20, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants