authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-03-11 19:29:10-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-03-12 15:41:00-07:00
log9634e983578f2c8a948228d14135b4640e3a8587
treec6d0288e4a4d2e73e630226d1d7a589bec69cfcd
parenta50458777b937805f8e8467cc1c2dad6516bb027

std.Io.Threaded: fix missing calls to syscall.finish()


1 files changed, 25 insertions(+), 11 deletions(-)

lib/std/Io/Threaded.zig+25-11
...@@ -11846,7 +11846,10 @@ fn netListenUnixWindows(...@@ -11846,7 +11846,10 @@ fn netListenUnixWindows(
11846 var syscall: AlertableSyscall = try .start();11846 var syscall: AlertableSyscall = try .start();
11847 while (true) {11847 while (true) {
11848 const rc = ws2_32.bind(socket_handle, &storage.any, addr_len);11848 const rc = ws2_32.bind(socket_handle, &storage.any, addr_len);
11849 if (rc != ws2_32.SOCKET_ERROR) break;11849 if (rc != ws2_32.SOCKET_ERROR) {
11850 syscall.finish();
11851 break;
11852 }
11850 switch (ws2_32.WSAGetLastError()) {11853 switch (ws2_32.WSAGetLastError()) {
11851 .NOTINITIALISED => {11854 .NOTINITIALISED => {
11852 syscall.finish();11855 syscall.finish();
...@@ -11869,15 +11872,18 @@ fn netListenUnixWindows(...@@ -11869,15 +11872,18 @@ fn netListenUnixWindows(
11869 }11872 }
11870 }11873 }
1187111874
11875 syscall = try .start();
11872 while (true) {11876 while (true) {
11873 try syscall.checkCancel();
11874 const rc = ws2_32.listen(socket_handle, options.kernel_backlog);11877 const rc = ws2_32.listen(socket_handle, options.kernel_backlog);
11875 if (rc != ws2_32.SOCKET_ERROR) {11878 if (rc != ws2_32.SOCKET_ERROR) {
11876 syscall.finish();11879 syscall.finish();
11877 return socket_handle;11880 return socket_handle;
11878 }11881 }
11879 switch (ws2_32.WSAGetLastError()) {11882 switch (ws2_32.WSAGetLastError()) {
11880 .EINTR, .ECANCELLED, .E_CANCELLED, .OPERATION_ABORTED => continue,11883 .EINTR, .ECANCELLED, .E_CANCELLED, .OPERATION_ABORTED => {
11884 try syscall.checkCancel();
11885 continue;
11886 },
11881 .NOTINITIALISED => {11887 .NOTINITIALISED => {
11882 syscall.finish();11888 syscall.finish();
11883 try initializeWsa(t);11889 try initializeWsa(t);
...@@ -12160,9 +12166,12 @@ fn setSocketOption(fd: posix.fd_t, level: i32, opt_name: u32, option: u32) !void...@@ -12160,9 +12166,12 @@ fn setSocketOption(fd: posix.fd_t, level: i32, opt_name: u32, option: u32) !void
12160fn setSocketOptionWsa(t: *Threaded, socket: Io.net.Socket.Handle, level: i32, opt_name: u32, option: u32) !void {12166fn setSocketOptionWsa(t: *Threaded, socket: Io.net.Socket.Handle, level: i32, opt_name: u32, option: u32) !void {
12161 const o: []const u8 = @ptrCast(&option);12167 const o: []const u8 = @ptrCast(&option);
12162 var syscall: AlertableSyscall = try .start();12168 var syscall: AlertableSyscall = try .start();
12163 const rc = ws2_32.setsockopt(socket, level, @bitCast(opt_name), o.ptr, @intCast(o.len));
12164 while (true) {12169 while (true) {
12165 if (rc != ws2_32.SOCKET_ERROR) return syscall.finish();12170 const rc = ws2_32.setsockopt(socket, level, @bitCast(opt_name), o.ptr, @intCast(o.len));
12171 if (rc != ws2_32.SOCKET_ERROR) {
12172 syscall.finish();
12173 return;
12174 }
12166 switch (ws2_32.WSAGetLastError()) {12175 switch (ws2_32.WSAGetLastError()) {
12167 .EINTR, .ECANCELLED, .E_CANCELLED, .OPERATION_ABORTED => {12176 .EINTR, .ECANCELLED, .E_CANCELLED, .OPERATION_ABORTED => {
12168 try syscall.checkCancel();12177 try syscall.checkCancel();
...@@ -12175,7 +12184,9 @@ fn setSocketOptionWsa(t: *Threaded, socket: Io.net.Socket.Handle, level: i32, op...@@ -12175,7 +12184,9 @@ fn setSocketOptionWsa(t: *Threaded, socket: Io.net.Socket.Handle, level: i32, op
12175 continue;12184 continue;
12176 },12185 },
12177 .ENETDOWN => return syscall.fail(error.NetworkDown),12186 .ENETDOWN => return syscall.fail(error.NetworkDown),
12178 .EFAULT, .ENOTSOCK, .EINVAL => |err| return syscall.wsaErrorBug(err),12187 .EFAULT => |err| return syscall.wsaErrorBug(err),
12188 .ENOTSOCK => |err| return syscall.wsaErrorBug(err),
12189 .EINVAL => |err| return syscall.wsaErrorBug(err),
12179 else => |err| return syscall.unexpectedWsaError(err),12190 else => |err| return syscall.unexpectedWsaError(err),
12180 }12191 }
12181 }12192 }
...@@ -12313,7 +12324,10 @@ fn netConnectUnixWindows(...@@ -12313,7 +12324,10 @@ fn netConnectUnixWindows(
12313 var syscall: AlertableSyscall = try .start();12324 var syscall: AlertableSyscall = try .start();
12314 while (true) {12325 while (true) {
12315 const rc = ws2_32.connect(socket_handle, &storage.any, addr_len);12326 const rc = ws2_32.connect(socket_handle, &storage.any, addr_len);
12316 if (rc != ws2_32.SOCKET_ERROR) break;12327 if (rc != ws2_32.SOCKET_ERROR) {
12328 syscall.finish();
12329 break;
12330 }
12317 switch (ws2_32.WSAGetLastError()) {12331 switch (ws2_32.WSAGetLastError()) {
12318 .EINTR, .ECANCELLED, .E_CANCELLED, .OPERATION_ABORTED => {12332 .EINTR, .ECANCELLED, .E_CANCELLED, .OPERATION_ABORTED => {
12319 try syscall.checkCancel();12333 try syscall.checkCancel();
...@@ -12326,14 +12340,14 @@ fn netConnectUnixWindows(...@@ -12326,14 +12340,14 @@ fn netConnectUnixWindows(
12326 continue;12340 continue;
12327 },12341 },
12328 .ECONNREFUSED => return syscall.fail(error.FileNotFound),12342 .ECONNREFUSED => return syscall.fail(error.FileNotFound),
12329 .EFAULT => |err| return syscall.wsaErrorBug(err),
12330 .EINVAL => |err| return syscall.wsaErrorBug(err),
12331 .EISCONN => |err| return syscall.wsaErrorBug(err),
12332 .ENOTSOCK => |err| return syscall.wsaErrorBug(err),
12333 .EWOULDBLOCK => return syscall.fail(error.WouldBlock),12343 .EWOULDBLOCK => return syscall.fail(error.WouldBlock),
12334 .EACCES => return syscall.fail(error.AccessDenied),12344 .EACCES => return syscall.fail(error.AccessDenied),
12335 .ENOBUFS => return syscall.fail(error.SystemResources),12345 .ENOBUFS => return syscall.fail(error.SystemResources),
12336 .EAFNOSUPPORT => return syscall.fail(error.AddressFamilyUnsupported),12346 .EAFNOSUPPORT => return syscall.fail(error.AddressFamilyUnsupported),
12347 .EFAULT => |err| return syscall.wsaErrorBug(err),
12348 .EINVAL => |err| return syscall.wsaErrorBug(err),
12349 .EISCONN => |err| return syscall.wsaErrorBug(err),
12350 .ENOTSOCK => |err| return syscall.wsaErrorBug(err),
12337 else => |err| return syscall.unexpectedWsaError(err),12351 else => |err| return syscall.unexpectedWsaError(err),
12338 }12352 }
12339 }12353 }