mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 13:54:21 +00:00
EventLoop: fix incorrect alignment panic
When the previous fiber did not request to be registered as an awaiter, it may not have actually been a full blown `Fiber`, so only create the `Fiber` pointer when needed.
This commit is contained in:
parent
1d7a69cb7d
commit
048a40dac7
1 changed files with 4 additions and 3 deletions
|
|
@ -84,7 +84,6 @@ pub fn io(el: *EventLoop) Io {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pub fn init(el: *EventLoop, gpa: Allocator) error{OutOfMemory}!void {
|
pub fn init(el: *EventLoop, gpa: Allocator) error{OutOfMemory}!void {
|
||||||
const threads_bytes = ((std.Thread.getCpuCount() catch 1) -| 1) * @sizeOf(Thread);
|
const threads_bytes = ((std.Thread.getCpuCount() catch 1) -| 1) * @sizeOf(Thread);
|
||||||
const idle_context_offset = std.mem.alignForward(usize, threads_bytes, @alignOf(Context));
|
const idle_context_offset = std.mem.alignForward(usize, threads_bytes, @alignOf(Context));
|
||||||
|
|
@ -231,9 +230,11 @@ const SwitchMessage = extern struct {
|
||||||
register_awaiter: ?*?*Fiber,
|
register_awaiter: ?*?*Fiber,
|
||||||
|
|
||||||
fn handle(message: *const SwitchMessage, el: *EventLoop) void {
|
fn handle(message: *const SwitchMessage, el: *EventLoop) void {
|
||||||
const prev_fiber: *Fiber = @alignCast(@fieldParentPtr("context", message.prev_context));
|
|
||||||
current_fiber_context = message.ready_context;
|
current_fiber_context = message.ready_context;
|
||||||
if (message.register_awaiter) |awaiter| if (@atomicRmw(?*Fiber, awaiter, .Xchg, prev_fiber, .acq_rel) == Fiber.finished) el.schedule(prev_fiber);
|
if (message.register_awaiter) |awaiter| {
|
||||||
|
const prev_fiber: *Fiber = @alignCast(@fieldParentPtr("context", message.prev_context));
|
||||||
|
if (@atomicRmw(?*Fiber, awaiter, .Xchg, prev_fiber, .acq_rel) == Fiber.finished) el.schedule(prev_fiber);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue