authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-05-27 14:41:13-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-05-27 14:41:13-04:00
logb3dc1c380d3510a4c1d28286fe4d345c1e307d58
treef9c7bf6615e58aacf297c241bf7599e56933a33c
parent13265cf7c785250fde12b22b5e748258d9b98afd
signaturelock-open Commit is signed but in an unrecognized format.

use close$NOCANCEL on darwin


2 files changed, 8 insertions(+), 3 deletions(-)

std/c.zig+1
......@@ -32,6 +32,7 @@ pub extern "c" fn abort() noreturn;
3232pub extern "c" fn exit(code: c_int) noreturn;
3333pub extern "c" fn isatty(fd: fd_t) c_int;
3434pub extern "c" fn close(fd: fd_t) c_int;
35pub extern "c" fn @"close$NOCANCEL"(fd: fd_t) c_int;
3536pub extern "c" fn fstat(fd: fd_t, buf: *Stat) c_int;
3637pub extern "c" fn @"fstat$INODE64"(fd: fd_t, buf: *Stat) c_int;
3738pub extern "c" fn lseek(fd: fd_t, offset: isize, whence: c_int) isize;
std/os.zig+7-3
......@@ -74,9 +74,13 @@ pub fn close(fd: fd_t) void {
7474 return windows.CloseHandle(fd);
7575 }
7676 if (wasi.is_the_target) {
77 switch (wasi.fd_close(fd)) {
78 0 => return,
79 else => |err| return unexpectedErrno(err),
77 _ = wasi.fd_close(fd);
78 }
79 if (darwin.is_the_target) {
80 // This avoids the EINTR problem.
81 switch (darwin.getErrno(darwin.@"close$NOCANCEL"(fd))) {
82 EBADF => unreachable, // Always a race condition.
83 else => return,
8084 }
8185 }
8286 switch (errno(system.close(fd))) {