Readiness is a property of the stream now
This figure documents the historical i386 source baseline. Current native x86-64/AArch64 qualification is recorded separately; this is not an ELF64 or native SMP implementation diagram.
Writers
4096-byte ringhead + byte count
Readers | Endpoint | Condition | Result |
|---|---|---|
| Read | Bytes present | READ |
| Read | No writers | READ + HUP; drain then EOF |
| Write | Readers + free space | WRITE |
| Write | No readers | HUP + ERROR; broken pipe |
| Either | Empty / full, peer still present | Operation may WOULD_BLOCK |
EOF and broken pipe derive from endpoint reference counts, not a special byte in the stream.
Text equivalent and source references
- A read endpoint is ready when bytes exist or no writers remain. After buffered bytes drain, no writers means EOF; readiness also reports HUP.
- A write endpoint is ready when readers exist and the 4096-byte ring has space. No readers yields HUP plus ERROR and writes report broken pipe. Empty/full streams with a peer present may return WOULD_BLOCK.
State / result matrix. Source paths refer to the atlas baseline; the kernel checkout is private.
kernel/core/user_io.c · stream_t, readiness, user_io_read, user_io_write