authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-01-16 21:21:56-08:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-01-30 12:10:01-08:00
logf4140f6e8b0aae1dc2e449852a739a14908b2c60
tree199e38677813e9a41e6152f16fa0712a19c4e059
parentafd91234a1214e58cd07ea99ba7fe51675a08b89

std.Io.Threaded: fix batchWait impl


1 files changed, 7 insertions(+), 10 deletions(-)

lib/std/Io/Threaded.zig+7-10
......@@ -2524,6 +2524,7 @@ fn batchWait(userdata: ?*anyopaque, b: *Io.Batch, timeout: Io.Timeout) Io.Batch.
25242524 try operate(t, &operations[op]);
25252525 ring[complete_tail.index(len)] = op;
25262526 complete_tail = complete_tail.next(len);
2527 poll_i = 0;
25272528 return;
25282529 },
25292530 else => {},
......@@ -2548,24 +2549,20 @@ fn batchWait(userdata: ?*anyopaque, b: *Io.Batch, timeout: Io.Timeout) Io.Batch.
25482549 if (deadline == null) continue;
25492550 return error.Timeout;
25502551 }
2551 var canceled = false;
2552 for (poll_buffer[0..poll_i], map_buffer[0..poll_i]) |*poll_fd, op| {
2552 while (poll_i != 0) {
2553 poll_i -= 1;
2554 const poll_fd = &poll_buffer[poll_i];
2555 const op = map_buffer[poll_i];
25532556 if (poll_fd.revents == 0) {
25542557 submit_head = submit_head.prev(len);
25552558 ring[submit_head.index(len)] = op;
25562559 } else {
2557 operate(t, &operations[op]) catch |err| switch (err) {
2558 error.Canceled => {
2559 canceled = true;
2560 continue;
2561 },
2562 };
2560 try operate(t, &operations[op]);
25632561 ring[complete_tail.index(len)] = op;
25642562 complete_tail = complete_tail.next(len);
25652563 }
25662564 }
2567 poll_i = 0;
2568 return if (canceled) error.Canceled;
2565 return;
25692566 },
25702567 .INTR => continue,
25712568 else => return error.ConcurrencyUnavailable,