fn futexWait(userdata: ?*anyopaque, ptr: *const u32, expected: u32, timeout: Io.Timeout) Io.Cancelable!void userdata: ?*anyopaqueptr: *const u32expected: u32timeout: Io.Timeout2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518fn 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);
}