aboutsummaryrefslogtreecommitdiff
path: root/std/os.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-05-27 14:41:13 -0400
committerAndrew Kelley <andrew@ziglang.org>2019-05-27 14:41:13 -0400
commitb3dc1c380d3510a4c1d28286fe4d345c1e307d58 (patch)
treef9c7bf6615e58aacf297c241bf7599e56933a33c /std/os.zig
parent13265cf7c785250fde12b22b5e748258d9b98afd (diff)
downloadzig-b3dc1c380d3510a4c1d28286fe4d345c1e307d58.tar.gz
zig-b3dc1c380d3510a4c1d28286fe4d345c1e307d58.zip
use close$NOCANCEL on darwin
Diffstat (limited to 'std/os.zig')
-rw-r--r--std/os.zig10
1 files changed, 7 insertions, 3 deletions
diff --git a/std/os.zig b/std/os.zig
index 3c18498a64..a181f58ac2 100644
--- a/std/os.zig
+++ b/std/os.zig
@@ -74,9 +74,13 @@ pub fn close(fd: fd_t) void {
return windows.CloseHandle(fd);
}
if (wasi.is_the_target) {
- switch (wasi.fd_close(fd)) {
- 0 => return,
- else => |err| return unexpectedErrno(err),
+ _ = wasi.fd_close(fd);
+ }
+ if (darwin.is_the_target) {
+ // This avoids the EINTR problem.
+ switch (darwin.getErrno(darwin.@"close$NOCANCEL"(fd))) {
+ EBADF => unreachable, // Always a race condition.
+ else => return,
}
}
switch (errno(system.close(fd))) {