diff options
| author | Stephen Gregoratto <dev@sgregoratto.me> | 2021-08-31 22:21:23 +1000 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-09-24 14:06:16 -0400 |
| commit | 87fd502fb68f8f488e6eba6b1f7d70902d6bfe5a (patch) | |
| tree | e6fa3a1c4b83deb7f03fa191456ef2c4fac5cf3b /lib/std/Thread.zig | |
| parent | a032fd01e88be2c6e8d0cfb0ccd3d9859c9dffdc (diff) | |
| download | zig-87fd502fb68f8f488e6eba6b1f7d70902d6bfe5a.tar.gz zig-87fd502fb68f8f488e6eba6b1f7d70902d6bfe5a.zip | |
Initial bringup of the Solaris/Illumos port
Diffstat (limited to 'lib/std/Thread.zig')
| -rw-r--r-- | lib/std/Thread.zig | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/std/Thread.zig b/lib/std/Thread.zig index 1fe8ca89d2..ae3a3e9d9e 100644 --- a/lib/std/Thread.zig +++ b/lib/std/Thread.zig @@ -41,6 +41,7 @@ pub const max_name_len = switch (target.os.tag) { .netbsd => 31, .freebsd => 15, .openbsd => 31, + .solaris => 31, else => 0, }; @@ -112,7 +113,7 @@ pub fn setName(self: Thread, name: []const u8) SetNameError!void { else => |e| return os.unexpectedErrno(e), } }, - .netbsd => if (use_pthreads) { + .netbsd, .solaris => if (use_pthreads) { const err = std.c.pthread_setname_np(self.getHandle(), name_with_terminator.ptr, null); switch (err) { .SUCCESS => return, @@ -202,7 +203,7 @@ pub fn getName(self: Thread, buffer_ptr: *[max_name_len:0]u8) GetNameError!?[]co else => |e| return os.unexpectedErrno(e), } }, - .netbsd => if (use_pthreads) { + .netbsd, .solaris => if (use_pthreads) { const err = std.c.pthread_getname_np(self.getHandle(), buffer.ptr, max_name_len + 1); switch (err) { .SUCCESS => return std.mem.sliceTo(buffer, 0), @@ -565,6 +566,16 @@ const PosixThreadImpl = struct { }; return @intCast(usize, count); }, + .solaris => { + // The "proper" way to get the cpu count would be to query + // /dev/kstat via ioctls, and traverse a linked list for each + // cpu. + const rc = c.sysconf(os._SC.NPROCESSORS_ONLN); + return switch (os.errno(rc)) { + .SUCCESS => @intCast(usize, rc), + else => |err| os.unexpectedErrno(err), + }; + }, .haiku => { var count: u32 = undefined; var system_info: os.system_info = undefined; |
