| ... | @@ -84,7 +84,6 @@ pub fn io(el: *EventLoop) Io { | ... | @@ -84,7 +84,6 @@ pub fn io(el: *EventLoop) Io { |
| 84 | }; | 84 | }; |
| 85 | } | 85 | } |
| 86 | | 86 | |
| 87 | | | |
| 88 | pub fn init(el: *EventLoop, gpa: Allocator) error{OutOfMemory}!void { | 87 | pub fn init(el: *EventLoop, gpa: Allocator) error{OutOfMemory}!void { |
| 89 | const threads_bytes = ((std.Thread.getCpuCount() catch 1) -| 1) * @sizeOf(Thread); | 88 | const threads_bytes = ((std.Thread.getCpuCount() catch 1) -| 1) * @sizeOf(Thread); |
| 90 | const idle_context_offset = std.mem.alignForward(usize, threads_bytes, @alignOf(Context)); | 89 | const idle_context_offset = std.mem.alignForward(usize, threads_bytes, @alignOf(Context)); |
| ... | @@ -231,9 +230,11 @@ const SwitchMessage = extern struct { | ... | @@ -231,9 +230,11 @@ const SwitchMessage = extern struct { |
| 231 | register_awaiter: ?*?*Fiber, | 230 | register_awaiter: ?*?*Fiber, |
| 232 | | 231 | |
| 233 | fn handle(message: *const SwitchMessage, el: *EventLoop) void { | 232 | fn handle(message: *const SwitchMessage, el: *EventLoop) void { |
| 234 | const prev_fiber: *Fiber = @alignCast(@fieldParentPtr("context", message.prev_context)); | | |
| 235 | current_fiber_context = message.ready_context; | 233 | current_fiber_context = message.ready_context; |
| 236 | if (message.register_awaiter) |awaiter| if (@atomicRmw(?*Fiber, awaiter, .Xchg, prev_fiber, .acq_rel) == Fiber.finished) el.schedule(prev_fiber); | 234 | if (message.register_awaiter) |awaiter| { |
| | 235 | const prev_fiber: *Fiber = @alignCast(@fieldParentPtr("context", message.prev_context)); |
| | 236 | if (@atomicRmw(?*Fiber, awaiter, .Xchg, prev_fiber, .acq_rel) == Fiber.finished) el.schedule(prev_fiber); |
| | 237 | } |
| 237 | } | 238 | } |
| 238 | }; | 239 | }; |
| 239 | | 240 | |