Skip to content

fix: process.exit(0) after main() prevents Node event loop hang#252

Merged
tps-flint merged 1 commit intomainfrom
fix/tps-process-exit
Mar 14, 2026
Merged

fix: process.exit(0) after main() prevents Node event loop hang#252
tps-flint merged 1 commit intomainfrom
fix/tps-process-exit

Conversation

@tps-anvil
Copy link
Collaborator

Problem

Compiled tps binary (Node) hangs after read-only commands like mail log, mail list, etc. bun run exits cleanly because Bun is more aggressive about draining the event loop. Node keeps alive due to open handles from imports/timers.

Fix

One line: chain .then(() => process.exit(0)) on main().

Commands that intentionally stay alive (tps mail watch, tps branch start) already call process.exit() explicitly via their own signal handlers — unaffected.

693 passing, 4 pre-existing failures.

The compiled tps binary (Node) kept the event loop alive after read-only
commands (mail log, mail list, etc.) because Node's event loop doesn't exit
while open handles exist (e.g. lingering timers from imports).

Bun exits cleanly because it is more aggressive about draining the event loop.

Fix: chain .then(() => process.exit(0)) on main() so the process always exits
after the command completes, regardless of open handles.

Commands that intentionally stay alive (tps mail watch, tps branch start, etc.)
already call process.exit() explicitly via SIGINT/SIGTERM handlers, so this
doesn't affect them.
@tps-flint tps-flint merged commit 81a94d8 into main Mar 14, 2026
11 checks passed
@tps-flint tps-flint deleted the fix/tps-process-exit branch March 14, 2026 19:10
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.

3 participants