mirror of
https://github.com/ziglang/zig.git
synced 2025-12-09 15:53:08 +00:00
std.Io.ThreadPool: fix asyncDetached
This commit is contained in:
parent
806214797a
commit
f0499abd88
@ -494,13 +494,12 @@ fn async(
|
|||||||
const DetachedClosure = struct {
|
const DetachedClosure = struct {
|
||||||
pool: *Pool,
|
pool: *Pool,
|
||||||
func: *const fn (context: *anyopaque) void,
|
func: *const fn (context: *anyopaque) void,
|
||||||
run_node: Pool.RunQueue.Node = .{ .data = .{ .runFn = runFn } },
|
runnable: Runnable = .{ .runFn = runFn },
|
||||||
context_alignment: std.mem.Alignment,
|
context_alignment: std.mem.Alignment,
|
||||||
context_len: usize,
|
context_len: usize,
|
||||||
|
|
||||||
fn runFn(runnable: *Pool.Runnable, _: ?usize) void {
|
fn runFn(runnable: *Pool.Runnable, _: ?usize) void {
|
||||||
const run_node: *Pool.RunQueue.Node = @fieldParentPtr("data", runnable);
|
const closure: *DetachedClosure = @alignCast(@fieldParentPtr("runnable", runnable));
|
||||||
const closure: *DetachedClosure = @alignCast(@fieldParentPtr("run_node", run_node));
|
|
||||||
closure.func(closure.contextPointer());
|
closure.func(closure.contextPointer());
|
||||||
const gpa = closure.pool.allocator;
|
const gpa = closure.pool.allocator;
|
||||||
const base: [*]align(@alignOf(DetachedClosure)) u8 = @ptrCast(closure);
|
const base: [*]align(@alignOf(DetachedClosure)) u8 = @ptrCast(closure);
|
||||||
@ -544,7 +543,7 @@ fn asyncDetached(
|
|||||||
.context_len = context.len,
|
.context_len = context.len,
|
||||||
};
|
};
|
||||||
@memcpy(closure.contextPointer()[0..context.len], context);
|
@memcpy(closure.contextPointer()[0..context.len], context);
|
||||||
pool.run_queue.prepend(&closure.run_node);
|
pool.run_queue.prepend(&closure.runnable.node);
|
||||||
|
|
||||||
if (pool.threads.items.len < pool.threads.capacity) {
|
if (pool.threads.items.len < pool.threads.capacity) {
|
||||||
pool.threads.addOneAssumeCapacity().* = std.Thread.spawn(.{
|
pool.threads.addOneAssumeCapacity().* = std.Thread.spawn(.{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user