authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-02-01 14:57:27-08:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-02-02 10:44:50-08:00
log633eb247ab819d7120fea2e0178100cc8fca8ac3
tree0dc4e758016d488a5404b0b3ee7419906608ea6a
parentb191e50be58cde6589a70410fb2f40ec43d0ffad

std.Io.Event: fix single-threaded implementation


2 files changed, 6 insertions(+), 3 deletions(-)

lib/std/Io.zig+1-1
......@@ -1467,7 +1467,7 @@ pub const Event = enum(u32) {
14671467 pub fn waitTimeout(event: *Event, io: Io, timeout: Timeout) WaitTimeoutError!void {
14681468 if (@cmpxchgStrong(Event, event, .unset, .waiting, .acquire, .acquire)) |prev| switch (prev) {
14691469 .unset => unreachable,
1470 .waiting => assert(!builtin.single_threaded), // invalid state
1470 .waiting => {},
14711471 .is_set => return,
14721472 };
14731473 errdefer {
lib/std/Io/Threaded.zig+5-2
......@@ -2461,7 +2461,10 @@ fn cancel(
24612461}
24622462
24632463fn futexWait(userdata: ?*anyopaque, ptr: *const u32, expected: u32, timeout: Io.Timeout) Io.Cancelable!void {
2464 if (builtin.single_threaded) unreachable; // Deadlock.
2464 if (builtin.single_threaded) {
2465 assert(timeout != .none); // Deadlock.
2466 return;
2467 }
24652468 const t: *Threaded = @ptrCast(@alignCast(userdata));
24662469 const t_io = ioBasic(t);
24672470 const timeout_ns: ?u64 = ns: {
......@@ -2479,7 +2482,7 @@ fn futexWaitUncancelable(userdata: ?*anyopaque, ptr: *const u32, expected: u32)
24792482}
24802483
24812484fn futexWake(userdata: ?*anyopaque, ptr: *const u32, max_waiters: u32) void {
2482 if (builtin.single_threaded) unreachable; // Nothing to wake up.
2485 if (builtin.single_threaded) return; // Nothing to wake up.
24832486 const t: *Threaded = @ptrCast(@alignCast(userdata));
24842487 _ = t;
24852488 Thread.futexWake(ptr, max_waiters);