Merge nucleic/hazy-opal-yak-cjc0 into dev

This commit is contained in:
2026-07-17 23:48:59 -07:00
parent 608e7d0450
commit 65623f1c34
5 changed files with 403 additions and 202 deletions
@@ -89,7 +89,17 @@ extension OSFile {
if errno != EAGAIN && errno != EIO {
throw POSIXError(.init(rawValue: errno)!)
}
break
// [Nucleic vendored patch] Destination full: RETURN, don't `break`. Breaking
// sent the outer `while true` straight back here — with the source idle and the
// destination still full, neither leg could progress and this spun the caller's
// thread at 100% until the peer drained. The caller is an epoll handler on
// vminitd's SINGLE ProcessSupervisor poller thread, so the spin froze every
// exec's stdio and every control-plane relay in the container at once (the
// all-sessions "produced no output within 60s" stall / dead control plane).
// The un-flushed bytes stay in the transfer pipe (`from.offset > to.offset`
// persists in the SpliceFiles); the destination fd is registered for EPOLLOUT,
// whose edge re-enters transferData and resumes the flush.
return (from.offset - fromOffset, to.offset - toOffset, .success)
}
to.offset += bytesWrote
if bytesWrote == 0 {