Commit 8784c7b581

Sébastien Marie <semarie@online.fr>
2020-11-10 06:25:59
openbsd: proper implementation for Thread.cpuCount()
1 parent 20b19d0
Changed files (2)
lib
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;
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";