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 22:03:14-08:00
log9134430387bb99504c5813abc8b566a97ba5b1f0
tree5562e690cf8a10ba1e40e74368d135271cae0916
parent68a34df0257b4baec32617bf8c70c223849b59e2

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,