fn futexWait(userdata: ?*anyopaque, ptr: *const u32, expected: u32, timeout: Io.Timeout) Io.Cancelable!void
fn futexWait(userdata: ?*anyopaque, ptr: *const u32, expected: u32, timeout: Io.Timeout) Io.Cancelable!void { if (builtin.single_threaded) { assert(timeout != .none); // Deadlock. return; } const t: *Threaded = @ptrCast(@alignCast(userdata)); const t_io = io(t); const timeout_ns: ?u64 = ns: { const d = timeout.toDurationFromNow(t_io) orelse break :ns null; break :ns std.math.lossyCast(u64, d.raw.toNanoseconds()); }; return Thread.futexWait(ptr, expected, timeout_ns); }