Skip to content

Track v1.0.3

Latest

Choose a tag to compare

@migueldeicaza migueldeicaza released this 05 Oct 20:16
· 5 commits to main since this release
v1.0.3 M2: checked terminal I/O and a typed terminal-loss event

When the terminal went away without a SIGHUP (a suspended or background pi),
the stdin read source ignored read() <= 0 and fired without end: pi ran at
~135% CPU until killed (reproduced 2026-10-05). Now reads, writes and the
raw-mode calls are checked; the first terminal loss stops input and output
and is reported once through Terminal.setIOErrorHandler / TUI.setIOErrorHandler
(default no-op for other conformers). TerminalIOError carries the operation,
descriptor and saved errno; isTerminalLoss is the upstream set (EIO, EPIPE,
ENOTCONN, ENOTTY) plus end-of-file on a terminal (Darwin returns EOF on a
closed pty master). Output uses write(2) with partial-write and EINTR handling
instead of FileHandle.write, and F_SETNOSIGPIPE on Darwin (no process-wide
SIGPIPE change). MiniTui reports; the host (PiSwiftTui) decides the exit.

MiniTui 578 -> 596, no existing test changed.