zig

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

commit c6fb968a3d702fbf8067164052ccf562f5e362ef (tree)
parent fd4a607bb2f1a1cbf8b8c1fd5d35f5f775e79114
Author: kprotty <kbutcher6200@gmail.com>
Date:   Sat, 26 Jun 2021 10:52:34 -0500

std.Thread: fix posix

Diffstat:
Mlib/std/Thread.zig | 13+++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/lib/std/Thread.zig b/lib/std/Thread.zig @@ -376,11 +376,16 @@ const PosixThreadImpl = struct { fn spawn(config: SpawnConfig, comptime f: anytype, args: anytype) !Impl { const Args = @TypeOf(args); const allocator = std.heap.c_allocator; + const Instance = struct { fn entryFn(raw_arg: ?*c_void) callconv(.C) ?*c_void { - const args_ptr = @ptrCast(*Args, @alignCast(@alignOf(Args), raw_arg orelse unreachable)); - defer allocator.destroy(args_ptr); - return callFn(f, args_ptr.*); + if (@sizeOf(Args) < 1) { + return callFn(f, @as(Args, undefined)); + } + + const args_ptr = @ptrCast(*Args, @alignCast(@alignOf(Args), raw_arg)); + defer allocator.destroy(args_ptr); + return callFn(f, args_ptr.*); } }; @@ -402,7 +407,7 @@ const PosixThreadImpl = struct { &handle, &attr, Instance.entryFn, - @ptrCast(*c_void, args_ptr), + if (@sizeOf(Args) > 1) @ptrCast(*c_void, args_ptr) else undefined, )) { 0 => return Impl{ .handle = handle }, os.EAGAIN => return error.SystemResources,