aboutsummaryrefslogtreecommitdiff
path: root/lib/std/Thread.zig
diff options
context:
space:
mode:
authorStephen Gregoratto <dev@sgregoratto.me>2021-08-31 22:21:23 +1000
committerAndrew Kelley <andrew@ziglang.org>2021-09-24 14:06:16 -0400
commit87fd502fb68f8f488e6eba6b1f7d70902d6bfe5a (patch)
treee6fa3a1c4b83deb7f03fa191456ef2c4fac5cf3b /lib/std/Thread.zig
parenta032fd01e88be2c6e8d0cfb0ccd3d9859c9dffdc (diff)
downloadzig-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.zig15
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;