authorgravatar for bblack@wikimedia.orgBrandon Black <bblack@wikimedia.org> 2026-01-14 18:15:18-06:00
committergravatar for bblack@wikimedia.orgBrandon Black <bblack@wikimedia.org> 2026-01-14 18:25:00-06:00
log376320a5e9bfc32162c81b592784e6f54aeae62b
treeffa2afac791b4edc36cb98d5eae695c0d66b3c8d
parent46fcf22630849f68f92aec64d38f44b0c4b3a943

Io.Select: do not swallow error.Canceled of task


1 files changed, 4 insertions(+), 1 deletions(-)

lib/std/Io.zig+4-1
......@@ -1269,10 +1269,13 @@ pub fn Select(comptime U: type) type {
12691269 args: @TypeOf(args),
12701270 fn start(type_erased_context: *const anyopaque) Cancelable!void {
12711271 const context: *const @This() = @ptrCast(@alignCast(type_erased_context));
1272 const elem = @unionInit(U, @tagName(field), @call(.auto, function, context.args));
1272 const raw_result = @call(.auto, function, context.args);
1273 const elem = @unionInit(U, @tagName(field), raw_result);
12731274 context.select.queue.putOneUncancelable(context.select.io, elem) catch |err| switch (err) {
12741275 error.Closed => unreachable,
12751276 };
1277 if (@typeInfo(@TypeOf(raw_result)) == .error_union)
1278 raw_result catch |err| if (err == error.Canceled) return error.Canceled;
12761279 }
12771280 };
12781281 const context: Context = .{ .select = s, .args = args };