You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
What's Changed
Bug Fixes
exec_command: bound drain in non-timeout path (#1164, closes #1162): A drain_task spawned in the non-timeout branch was never awaited, causing exec_command calls to hang indefinitely when a background subprocess held the output pipes open after exit. The drain future is now stored and explicitly awaited so the handler always returns.
exec_command: remove -l login shell on macOS, invert wait/drain order, add rx.close() (#1166): Removed the -l (login-shell) flag on macOS that added 100-200 ms of profile-sourcing latency per call. The wait/drain order is now correct: the child process is awaited before the drain task, preventing a race where drain completed before the process had fully flushed. rx.close() is called after drain to signal the output channel, eliminating another class of hangs.
Features
exec_command: drain_timeout_secs parameter (#1167, closes #1165): Accepts an integer >= 0 controlling how long the post-exit drain waits for a background subprocess holding pipes open before returning with output_truncated: true. 0 or omitted uses the 500 ms default; negative values return INVALID_PARAMS. README and tool description updated to document the new parameter alongside timeout_secs.
Documentation
exec_command: sync README and tool description with v0.20.2 changes (#1168): Documents timeout_secs, timed_out, and heredoc validation behaviour introduced in v0.20.2.