zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 8784c7b581b8a21c3698c4564e2a912676adaa2e (tree)
parent 20b19d0092a70999ff58a0f8969e64ec4ecf6c2e
Author: Sébastien Marie <semarie@online.fr>
Date:   Tue, 10 Nov 2020 05:25:59 +0000

openbsd: proper implementation for Thread.cpuCount()

Diffstat:
Mlib/std/os/bits/openbsd.zig | 3+++
Mlib/std/thread.zig | 10++++++++++
2 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/lib/std/os/bits/openbsd.zig b/lib/std/os/bits/openbsd.zig @@ -292,10 +292,13 @@ pub const AI_ADDRCONFIG = 64; pub const CTL_KERN = 1; pub const CTL_DEBUG = 5; +pub const CTL_HW = 6; pub const KERN_PROC_ARGS = 55; pub const KERN_PROC_ARGV = 1; +pub const HW_NCPUONLINE = 25; + pub const PATH_MAX = 1024; pub const STDIN_FILENO = 0; diff --git a/lib/std/thread.zig b/lib/std/thread.zig @@ -491,6 +491,16 @@ pub const Thread = struct { if (std.Target.current.os.tag == .windows) { return os.windows.peb().NumberOfProcessors; } + if (std.Target.current.os.tag == .openbsd) { + var count: c_int = undefined; + var count_size: usize = @sizeOf(c_int); + const mib = [_]c_int{ os.CTL_HW, os.HW_NCPUONLINE }; + os.sysctl(&mib, &count, &count_size, null, 0) catch |err| switch (err) { + error.NameTooLong, error.UnknownName => unreachable, + else => |e| return e, + }; + return @intCast(usize, count); + } var count: c_int = undefined; var count_len: usize = @sizeOf(c_int); const name = if (comptime std.Target.current.isDarwin()) "hw.logicalcpu" else "hw.ncpu";