commit 69f9395b382eb564285367e539d43dc6c8edd257 (tree) parent ff883dd6ce910e2a0aa301e1ee84d93f53cf8765 Author: Loris Cro <kappaloris@gmail.com> Date: Fri, 7 Nov 2025 13:33:45 +0100 fix logic bug in groupAsync Diffstat:
| M | lib/std/Io/Threaded.zig | | | 8 | ++++---- |
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/lib/std/Io/Threaded.zig b/lib/std/Io/Threaded.zig @@ -695,10 +695,6 @@ fn groupAsync( t.mutex.lock(); - // Append to the group linked list inside the mutex to make `Io.Group.async` thread-safe. - gc.node = .{ .next = @ptrCast(@alignCast(group.token)) }; - group.token = &gc.node; - if (t.available_thread_count == 0) { if (t.cpu_count != 0 and t.threads.items.len >= t.cpu_count) { t.mutex.unlock(); @@ -727,6 +723,10 @@ fn groupAsync( t.available_thread_count -= 1; } + // Append to the group linked list inside the mutex to make `Io.Group.async` thread-safe. + gc.node = .{ .next = @ptrCast(@alignCast(group.token)) }; + group.token = &gc.node; + t.run_queue.prepend(&gc.closure.node); // This needs to be done before unlocking the mutex to avoid a race with