authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-12-01 04:30:55+01:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-12-16 06:25:07+01:00
log707e389f38d76a441751676f89cf862000fabc1d
tree915f5c86bd3092ff5184d46d16d215afbcc5a05e
parent18db762bb8385bb468a3d479c715f6ec906f7d2a
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.Io.Threaded: apply netbsd todo hacks to openbsd

https://codeberg.org/ziglang/zig/issues/30063

1 files changed, 7 insertions(+), 1 deletions(-)

lib/std/Io/Threaded.zig+7-1
......@@ -1023,6 +1023,7 @@ fn cancel(
10231023fn mutexLock(userdata: ?*anyopaque, prev_state: Io.Mutex.State, mutex: *Io.Mutex) Io.Cancelable!void {
10241024 if (builtin.single_threaded) unreachable; // Interface should have prevented this.
10251025 if (native_os == .netbsd) @panic("TODO");
1026 if (native_os == .openbsd) @panic("TODO");
10261027 const t: *Threaded = @ptrCast(@alignCast(userdata));
10271028 const current_thread = Thread.getCurrent(t);
10281029 if (prev_state == .contended) {
......@@ -1036,6 +1037,7 @@ fn mutexLock(userdata: ?*anyopaque, prev_state: Io.Mutex.State, mutex: *Io.Mutex
10361037fn mutexLockUncancelable(userdata: ?*anyopaque, prev_state: Io.Mutex.State, mutex: *Io.Mutex) void {
10371038 if (builtin.single_threaded) unreachable; // Interface should have prevented this.
10381039 if (native_os == .netbsd) @panic("TODO");
1040 if (native_os == .openbsd) @panic("TODO");
10391041 _ = userdata;
10401042 if (prev_state == .contended) {
10411043 futexWaitUncancelable(@ptrCast(&mutex.state), @intFromEnum(Io.Mutex.State.contended));
......@@ -1048,6 +1050,7 @@ fn mutexLockUncancelable(userdata: ?*anyopaque, prev_state: Io.Mutex.State, mute
10481050fn mutexUnlock(userdata: ?*anyopaque, prev_state: Io.Mutex.State, mutex: *Io.Mutex) void {
10491051 if (builtin.single_threaded) unreachable; // Interface should have prevented this.
10501052 if (native_os == .netbsd) @panic("TODO");
1053 if (native_os == .openbsd) @panic("TODO");
10511054 _ = userdata;
10521055 _ = prev_state;
10531056 if (@atomicRmw(Io.Mutex.State, &mutex.state, .Xchg, .unlocked, .release) == .contended) {
......@@ -1058,6 +1061,7 @@ fn mutexUnlock(userdata: ?*anyopaque, prev_state: Io.Mutex.State, mutex: *Io.Mut
10581061fn conditionWaitUncancelable(userdata: ?*anyopaque, cond: *Io.Condition, mutex: *Io.Mutex) void {
10591062 if (builtin.single_threaded) unreachable; // Deadlock.
10601063 if (native_os == .netbsd) @panic("TODO");
1064 if (native_os == .openbsd) @panic("TODO");
10611065 const t: *Threaded = @ptrCast(@alignCast(userdata));
10621066 const t_io = ioBasic(t);
10631067 comptime assert(@TypeOf(cond.state) == u64);
......@@ -1090,6 +1094,7 @@ fn conditionWaitUncancelable(userdata: ?*anyopaque, cond: *Io.Condition, mutex:
10901094fn conditionWait(userdata: ?*anyopaque, cond: *Io.Condition, mutex: *Io.Mutex) Io.Cancelable!void {
10911095 if (builtin.single_threaded) unreachable; // Deadlock.
10921096 if (native_os == .netbsd) @panic("TODO");
1097 if (native_os == .openbsd) @panic("TODO");
10931098 const t: *Threaded = @ptrCast(@alignCast(userdata));
10941099 const current_thread = Thread.getCurrent(t);
10951100 const t_io = ioBasic(t);
......@@ -1192,6 +1197,7 @@ fn conditionWake(userdata: ?*anyopaque, cond: *Io.Condition, wake: Io.Condition.
11921197 // - T1: s & signals == 0 -> FUTEX_WAIT(&epoch, e) (missed both epoch change and state change)
11931198 _ = cond_epoch.fetchAdd(1, .release);
11941199 if (native_os == .netbsd) @panic("TODO");
1200 if (native_os == .openbsd) @panic("TODO");
11951201 futexWake(cond_epoch, to_wake);
11961202 return;
11971203 };
......@@ -6862,7 +6868,7 @@ pub fn futexWake(ptr: *const std.atomic.Value(u32), max_waiters: u32) void {
68626868/// It can also block threads until the value is set with cancelation via timed
68636869/// waits. Statically initializable; four bytes on all targets.
68646870pub const ResetEvent = switch (native_os) {
6865 .illumos, .netbsd => ResetEventPosix,
6871 .illumos, .netbsd, .openbsd => ResetEventPosix,
68666872 else => ResetEventFutex,
68676873};
68686874