Register, scan and block without losing a wakeup
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.
Wait registration and the blocked transition use the same guard as publishers.
Text equivalent and source references
- Acquire scheduler guard then stream lock, register wait items and scan current stream, timer, child and TCP levels.
- Ready items, poll mode or deadline expiry return a count; a relevant signal interrupts. Otherwise mark blocked under the guard, release before scheduling, then reacquire and rescan after a publisher wakes the task. Local console input is deliberately excluded from nonblocking readiness.
Concurrency flow. Source paths refer to the atlas baseline; the kernel checkout is private.
kernel/core/user_io.c · io_acquire, user_wait_many, readiness, wake_waiterskernel/net/tcp.c · tcp_user_ready