Skip to content

Commit a25824e

Browse files
kristatemdsteele
authored andcommitted
zig/std/os/index.zig: clean-up thread id; (#1)
Ref ziglang#1316 ziglang#1330
1 parent 86d1cc8 commit a25824e

File tree

1 file changed

+18
-21
lines changed

1 file changed

+18
-21
lines changed

std/os/index.zig

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2518,22 +2518,28 @@ pub const Thread = struct {
25182518
pub const use_pthreads = is_posix and builtin.link_libc;
25192519

25202520
/// An opaque type representing a kernel thread ID.
2521-
pub const Id = *@OpaqueType();
2521+
pub const Id = if (use_pthreads)
2522+
c.pthread_t
2523+
else switch (builtin.os) {
2524+
builtin.Os.linux => i32,
2525+
builtin.Os.windows => windows.HANDLE,
2526+
else => @compileError("Unsupported OS"),
2527+
};
25222528

25232529
pub const Data = if (use_pthreads)
25242530
struct {
2525-
handle: c.pthread_t,
2531+
handle: Thread.Id,
25262532
stack_addr: usize,
25272533
stack_len: usize,
25282534
}
25292535
else switch (builtin.os) {
25302536
builtin.Os.linux => struct {
2531-
pid: i32,
2537+
handle: Thread.Id,
25322538
stack_addr: usize,
25332539
stack_len: usize,
25342540
},
25352541
builtin.Os.windows => struct {
2536-
handle: windows.HANDLE,
2542+
handle: Thread.Id,
25372543
alloc_start: *c_void,
25382544
heap_handle: windows.HANDLE,
25392545
},
@@ -2547,26 +2553,17 @@ pub const Thread = struct {
25472553
// storage (https://github.com/ziglang/zig/issues/924), we could
25482554
// memoize it.
25492555
if (use_pthreads) {
2550-
return @ptrCast(Thread.Id, c.pthread_self());
2556+
return c.pthread_self();
25512557
} else return switch (builtin.os) {
2552-
builtin.Os.linux =>
2553-
@intToPtr(Thread.Id, @bitCast(u32, linux.getpid())),
2554-
builtin.Os.windows =>
2555-
@ptrCast(Thread.Id, windows.GetCurrentThread()),
2558+
builtin.Os.linux => linux.getpid(),
2559+
builtin.Os.windows => windows.GetCurrentThread(),
25562560
else => @compileError("Unsupported OS"),
25572561
};
25582562
}
25592563

2560-
/// Returns the ID of this thread object.
2564+
/// Returns the ID of this thread.
25612565
pub fn id(self: *const Thread) Thread.Id {
2562-
if (use_pthreads) {
2563-
return @ptrCast(Thread.Id, self.data.handle);
2564-
} else return switch (builtin.os) {
2565-
builtin.Os.linux =>
2566-
@intToPtr(Thread.Id, @bitCast(u32, self.data.pid)),
2567-
builtin.Os.windows => @ptrCast(Thread.Id, self.data.handle),
2568-
else => @compileError("Unsupported OS"),
2569-
};
2566+
return self.data.handle;
25702567
}
25712568

25722569
pub fn wait(self: *const Thread) void {
@@ -2583,9 +2580,9 @@ pub const Thread = struct {
25832580
} else switch (builtin.os) {
25842581
builtin.Os.linux => {
25852582
while (true) {
2586-
const pid_value = @atomicLoad(i32, &self.data.pid, builtin.AtomicOrder.SeqCst);
2583+
const pid_value = @atomicLoad(i32, &self.data.handle, builtin.AtomicOrder.SeqCst);
25872584
if (pid_value == 0) break;
2588-
const rc = linux.futex_wait(@ptrToInt(&self.data.pid), linux.FUTEX_WAIT, pid_value, null);
2585+
const rc = linux.futex_wait(@ptrToInt(&self.data.handle), linux.FUTEX_WAIT, pid_value, null);
25892586
switch (linux.getErrno(rc)) {
25902587
0 => continue,
25912588
posix.EINTR => continue,
@@ -2767,7 +2764,7 @@ pub fn spawnThread(context: var, comptime startFn: var) SpawnThreadError!*Thread
27672764
// use linux API directly. TODO use posix.CLONE_SETTLS and initialize thread local storage correctly
27682765
const flags = posix.CLONE_VM | posix.CLONE_FS | posix.CLONE_FILES | posix.CLONE_SIGHAND | posix.CLONE_THREAD | posix.CLONE_SYSVSEM | posix.CLONE_PARENT_SETTID | posix.CLONE_CHILD_CLEARTID | posix.CLONE_DETACHED;
27692766
const newtls: usize = 0;
2770-
const rc = posix.clone(MainFuncs.linuxThreadMain, stack_end, flags, arg, &thread_ptr.data.pid, newtls, &thread_ptr.data.pid);
2767+
const rc = posix.clone(MainFuncs.linuxThreadMain, stack_end, flags, arg, &thread_ptr.data.handle, newtls, &thread_ptr.data.handle);
27712768
const err = posix.getErrno(rc);
27722769
switch (err) {
27732770
0 => return thread_ptr,

0 commit comments

Comments
 (0)