mirror of https://github.com/cirruslabs/tart.git
Fix busy loop in `tart exec -i` after piped stdin reaches EOF
Unregister the stdin readabilityHandler when availableData returns empty: a closed pipe fd stays permanently readable, so Foundation re-invokes the handler in a tight loop (fstat + zero-byte read) at 100% of one core for the rest of the command's lifetime. Fixes #1280 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
32d084e9ed
commit
d983e1d9ed
|
|
@ -129,6 +129,11 @@ struct Exec: AsyncParsableCommand {
|
|||
let data = handle.availableData
|
||||
|
||||
if data.isEmpty {
|
||||
// EOF: unregister the handler, otherwise the fd stays permanently
|
||||
// "readable" and Foundation re-invokes us in a tight loop, burning
|
||||
// 100% of a core for the rest of the command's lifetime
|
||||
handle.readabilityHandler = nil
|
||||
|
||||
continuation.finish()
|
||||
} else {
|
||||
continuation.yield(data)
|
||||
|
|
|
|||
Loading…
Reference in New Issue