D476
- The errno table carries published values too, in a tier
that says so
assumed - 2026-09-02 (user-directed bulk port, batch 14)
The timed acquisitions - pthread_mutex_timedlock,
sem_timedwait, pthread_rwlock_timedrdlock and
the rest - all have to report one condition nothing else in this project
had ever reported: a wait that ran out of time. There was no value to
report it with, and the reason is a rule worth keeping.
orbistoun-core's errno module said of
itself:
Only values somebody has actually observed coming back are listed - this is a record of measurements, not a copy of
errno.h, and a name here is a claim that the target produced it.
That is a real, checkable property and every one of its nine entries
earned it: seven came out of a single conformance run on a console, each
provoked deliberately. ETIMEDOUT has not been provoked on
hardware by anybody, because until this batch nothing here could ask for
a bounded wait.
The three options, and why the third
Answer EBUSY, which is measured.
Rejected: it is a wrong answer, which principle 3 forbids more
firmly than an unverified one. POSIX has
pthread_mutex_timedlock answer ETIMEDOUT and
never EBUSY, and the difference is one a guest acts on -
the ordinary retry loop treats busy as "go round again" and timed-out as
"give up". A guest handed the wrong one of those spins forever, and
nothing in a trace would say why.
Answer the project's own Unimplemented
placeholder. Rejected for the opposite reason: the call
is implemented. The wait ran, the deadline passed, and the
outcome is known exactly. Reporting "not handled yet" would be as untrue
as reporting the wrong errno, in the other direction, and it would
mislead the gap report as well as the guest.
Add the value, and say how it is known. Taken.
ETIMEDOUT is 60 in the documented errno
numbering of the platform's FreeBSD ancestor - a citable source, which
is exactly what principle 1 calls published rather than
measured. The project already has the vocabulary for this
distinction and uses it everywhere else; the errno module was the one
place that had collapsed it, by holding a single tier and describing the
whole module in the terms of that tier.
So the module now has two groups with a line between them, and its own note explains which is which. The measured tier keeps its exact claim - nothing was loosened to let the new value in, which is the part that matters. A blanket sentence that had become false is now two precise sentences that are both true.
What is actually uncertain here is small
The encoding around the number was measured, and measured well:
0x8002_0000 | errno was confirmed across seven values from
five unrelated call families in one run on a console. So the unverified
part of TIMED_OUT is the number 60 alone, taken from the
documented ancestor of the platform's own kernel.
That is a narrow gap and, unusually, a nameable one.
The entry carries the probe that settles it: take a lock, call
pthread_mutex_timedlock on it with a deadline a millisecond
out, and record what comes back. One conformance check promotes it from
published to measured, and the promotion is a one-line change.
This is why the tier is worth having rather than being a place to hide guesses. An entry that cannot name what would confirm it does not belong in either group.
Status
assumed, because the value has not been seen from the
target. It becomes measured the day somebody runs the probe
named above - and until then, a title behaving oddly around a timed wait
is the first place to look.