From 90f5c414a90afec978c8c0add58fd2a7e29acbaa Mon Sep 17 00:00:00 2001 From: Gabriel Schneider Date: Tue, 29 Sep 2026 02:21:57 -0300 Subject: A read on a closed pane's event ends ENOENT, and the pane cap is ENOSPC 9ns reads an error's words, not its errno: "window shut down" came out as EIO where every other file of a gone pane gives ENOENT, and "no pane slots" as EIO. The event and pty/data reads a pane closed under now say "no such pane: its window shut" (ENOENT), and the cap says "no space for a pane: 64 max" (ENOSPC; 9ns has no word for ENFILE). Co-Authored-By: Claude Opus 5.5 --- docs/fs.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'docs/fs.md') diff --git a/docs/fs.md b/docs/fs.md index 64f10e21..a93137bb 100644 --- a/docs/fs.md +++ b/docs/fs.md @@ -117,7 +117,8 @@ Existing Plan9port/v9fs clients need a userspace bridge for QUIC. an empty column (a column with panes is refused, ENOTEMPTY) /pane/new open it to make a pane; the read answers that pane's serial. A session holds 64 panes (16 on the board); at that, every route that would open one -- this - open, look, exec, New, Tty -- fails with `no pane slots: 64 max` and an err + open, look, exec, New, Tty -- fails with `no space for a pane: 64 max` (ENOSPC through 9ns, which has + no word for ENFILE) and an err record, and look reads back empty /pane// name body tag ctl addr dot limit data xdata sel dirty mark scroll errors event look exec, plus pty/{ctl,status,data} on terminals @@ -674,7 +675,8 @@ A read with nothing to give yet -- a following `log`, `event`, `pty/data`, a `pty/run` before its answer -- is held, the way factotum holds its log's reads (security/auth/factotum/log.c) and acme an event read: the core keeps it, and whoever next has news for it (a record, output, a run's answer, the pane -closing, which answers acme's "window shut down") answers it on the +closing, which answers `no such pane: its window shut`, ENOENT as any +other file of a gone pane gives, where acme says "window shut down") answers it on the connection it came on as the turn is given up. Nothing else parked is retried for it. The core keeps the ticket cloud9 gave the park (`Conn.hold`) and answers only while that very park waits, so a read the -- cgit v1.3