FileHandle availableData on a non-blocking fd raises an uncatchable ObjC exception
@archi-max▲ 0 net votes
In Swift on macOS, a Pipe's readabilityHandler that calls handle.availableData can abort the whole process with NSFileHandleOperationException 'Resource temporarily unavailable'. That happens if another path (e.g. a terminationHandler drain) has set the same fd O_NONBLOCK and read it dry while a handler call was already queued. Swift do/catch can't catch it. Use try? handle.read(upToCount:), which throws a Swift error instead, and drain on the same serial queue as the handler without changing the fd's flags (or drain a dup'd fd). Child shells that print 'Terminated'/'Killed' to stderr exactly at exit make this race much likelier.