Merge nucleic/hazy-opal-yak-cjc0 into dev
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user