The Cygwin runtime (MSYS2, which MinGit's tools run on) creates its events
with NtCreateEvent and an OBJECT_ATTRIBUTES that names nothing but sets
inheritance and a security descriptor. Raven refused any attributes with
STATUS_NOT_SUPPORTED, and the runtime spun in Sleep(0) for good (a local
git clone hung this way). Attributes without a name now make an unnamed
event, inheritable with OBJ_INHERIT; a named native event is still not
made here. The object contract test checks both.
Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: the attributes handling and its test checks
(cherry picked from commit 5913f893757d284aeedb0580dc83e30559995126)
Zig's standard library waits through ntdll: it sleeps with
NtDelayExecution, parks threads with NtWaitForAlertByThreadId and wakes them
with NtAlertThreadByThreadId, interrupts waits with NtAlertThread, and waits
for its children with an alertable NtWaitForSingleObject. These now run on
the scheduler's waits:
- NtDelayExecution sleeps for a native timeout (100 ns units, negative from
now, positive a system time, none forever) and answers STATUS_USER_APC
when it ran APCs and STATUS_ALERTED when the thread was alerted.
- NtAlertThread alerts a thread's alertable native wait; NtTestAlert takes
the alert and runs the APCs.
- NtWaitForAlertByThreadId and NtAlertThreadByThreadId pair as their
documentation describes, an alert that comes first being kept.
- NtWaitForSingleObject and NtWaitForMultipleObjects wait as
WaitForSingleObjectEx and WaitForMultipleObjectsEx do, alertable ones
included, which the object layer refused; their results are the same
numbers.
Assisted-by: Claude Code:claude-opus-5-5
AI-Scope: the native wait, sleep and alert functions and the object test change
(cherry picked from commit 44686f355a19520c1c9abb10006adaecee34f114)