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(...@@ -1023,6 +1023,7 @@ fn cancel(
1023fn mutexLock(userdata: ?*anyopaque, prev_state: Io.Mutex.State, mutex: *Io.Mutex) Io.Cancelable!void {1023fn mutexLock(userdata: ?*anyopaque, prev_state: Io.Mutex.State, mutex: *Io.Mutex) Io.Cancelable!void {
1024 if (builtin.single_threaded) unreachable; // Interface should have prevented this.1024 if (builtin.single_threaded) unreachable; // Interface should have prevented this.
1025 if (native_os == .netbsd) @panic("TODO");1025 if (native_os == .netbsd) @panic("TODO");
1026 if (native_os == .openbsd) @panic("TODO");
1026 const t: *Threaded = @ptrCast(@alignCast(userdata));1027 const t: *Threaded = @ptrCast(@alignCast(userdata));
1027 const current_thread = Thread.getCurrent(t);1028 const current_thread = Thread.getCurrent(t);
1028 if (prev_state == .contended) {1029 if (prev_state == .contended) {
...@@ -1036,6 +1037,7 @@ fn mutexLock(userdata: ?*anyopaque, prev_state: Io.Mutex.State, mutex: *Io.Mutex...@@ -1036,6 +1037,7 @@ fn mutexLock(userdata: ?*anyopaque, prev_state: Io.Mutex.State, mutex: *Io.Mutex
1036fn mutexLockUncancelable(userdata: ?*anyopaque, prev_state: Io.Mutex.State, mutex: *Io.Mutex) void {1037fn mutexLockUncancelable(userdata: ?*anyopaque, prev_state: Io.Mutex.State, mutex: *Io.Mutex) void {
1037 if (builtin.single_threaded) unreachable; // Interface should have prevented this.1038 if (builtin.single_threaded) unreachable; // Interface should have prevented this.
1038 if (native_os == .netbsd) @panic("TODO");1039 if (native_os == .netbsd) @panic("TODO");
1040 if (native_os == .openbsd) @panic("TODO");
1039 _ = userdata;1041 _ = userdata;
1040 if (prev_state == .contended) {1042 if (prev_state == .contended) {
1041 futexWaitUncancelable(@ptrCast(&mutex.state), @intFromEnum(Io.Mutex.State.contended));1043 futexWaitUncancelable(@ptrCast(&mutex.state), @intFromEnum(Io.Mutex.State.contended));
...@@ -1048,6 +1050,7 @@ fn mutexLockUncancelable(userdata: ?*anyopaque, prev_state: Io.Mutex.State, mute...@@ -1048,6 +1050,7 @@ fn mutexLockUncancelable(userdata: ?*anyopaque, prev_state: Io.Mutex.State, mute
1048fn mutexUnlock(userdata: ?*anyopaque, prev_state: Io.Mutex.State, mutex: *Io.Mutex) void {1050fn mutexUnlock(userdata: ?*anyopaque, prev_state: Io.Mutex.State, mutex: *Io.Mutex) void {
1049 if (builtin.single_threaded) unreachable; // Interface should have prevented this.1051 if (builtin.single_threaded) unreachable; // Interface should have prevented this.
1050 if (native_os == .netbsd) @panic("TODO");1052 if (native_os == .netbsd) @panic("TODO");
1053 if (native_os == .openbsd) @panic("TODO");
1051 _ = userdata;1054 _ = userdata;
1052 _ = prev_state;1055 _ = prev_state;
1053 if (@atomicRmw(Io.Mutex.State, &mutex.state, .Xchg, .unlocked, .release) == .contended) {1056 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...@@ -1058,6 +1061,7 @@ fn mutexUnlock(userdata: ?*anyopaque, prev_state: Io.Mutex.State, mutex: *Io.Mut
1058fn conditionWaitUncancelable(userdata: ?*anyopaque, cond: *Io.Condition, mutex: *Io.Mutex) void {1061fn conditionWaitUncancelable(userdata: ?*anyopaque, cond: *Io.Condition, mutex: *Io.Mutex) void {
1059 if (builtin.single_threaded) unreachable; // Deadlock.1062 if (builtin.single_threaded) unreachable; // Deadlock.
1060 if (native_os == .netbsd) @panic("TODO");1063 if (native_os == .netbsd) @panic("TODO");
1064 if (native_os == .openbsd) @panic("TODO");
1061 const t: *Threaded = @ptrCast(@alignCast(userdata));1065 const t: *Threaded = @ptrCast(@alignCast(userdata));
1062 const t_io = ioBasic(t);1066 const t_io = ioBasic(t);
1063 comptime assert(@TypeOf(cond.state) == u64);1067 comptime assert(@TypeOf(cond.state) == u64);
...@@ -1090,6 +1094,7 @@ fn conditionWaitUncancelable(userdata: ?*anyopaque, cond: *Io.Condition, mutex:...@@ -1090,6 +1094,7 @@ fn conditionWaitUncancelable(userdata: ?*anyopaque, cond: *Io.Condition, mutex:
1090fn conditionWait(userdata: ?*anyopaque, cond: *Io.Condition, mutex: *Io.Mutex) Io.Cancelable!void {1094fn conditionWait(userdata: ?*anyopaque, cond: *Io.Condition, mutex: *Io.Mutex) Io.Cancelable!void {
1091 if (builtin.single_threaded) unreachable; // Deadlock.1095 if (builtin.single_threaded) unreachable; // Deadlock.
1092 if (native_os == .netbsd) @panic("TODO");1096 if (native_os == .netbsd) @panic("TODO");
1097 if (native_os == .openbsd) @panic("TODO");
1093 const t: *Threaded = @ptrCast(@alignCast(userdata));1098 const t: *Threaded = @ptrCast(@alignCast(userdata));
1094 const current_thread = Thread.getCurrent(t);1099 const current_thread = Thread.getCurrent(t);
1095 const t_io = ioBasic(t);1100 const t_io = ioBasic(t);
...@@ -1192,6 +1197,7 @@ fn conditionWake(userdata: ?*anyopaque, cond: *Io.Condition, wake: Io.Condition....@@ -1192,6 +1197,7 @@ fn conditionWake(userdata: ?*anyopaque, cond: *Io.Condition, wake: Io.Condition.
1192 // - T1: s & signals == 0 -> FUTEX_WAIT(&epoch, e) (missed both epoch change and state change)1197 // - T1: s & signals == 0 -> FUTEX_WAIT(&epoch, e) (missed both epoch change and state change)
1193 _ = cond_epoch.fetchAdd(1, .release);1198 _ = cond_epoch.fetchAdd(1, .release);
1194 if (native_os == .netbsd) @panic("TODO");1199 if (native_os == .netbsd) @panic("TODO");
1200 if (native_os == .openbsd) @panic("TODO");
1195 futexWake(cond_epoch, to_wake);1201 futexWake(cond_epoch, to_wake);
1196 return;1202 return;
1197 };1203 };
...@@ -6862,7 +6868,7 @@ pub fn futexWake(ptr: *const std.atomic.Value(u32), max_waiters: u32) void {...@@ -6862,7 +6868,7 @@ pub fn futexWake(ptr: *const std.atomic.Value(u32), max_waiters: u32) void {
6862/// It can also block threads until the value is set with cancelation via timed6868/// It can also block threads until the value is set with cancelation via timed
6863/// waits. Statically initializable; four bytes on all targets.6869/// waits. Statically initializable; four bytes on all targets.
6864pub const ResetEvent = switch (native_os) {6870pub const ResetEvent = switch (native_os) {
6865 .illumos, .netbsd => ResetEventPosix,6871 .illumos, .netbsd, .openbsd => ResetEventPosix,
6866 else => ResetEventFutex,6872 else => ResetEventFutex,
6867};6873};
68686874