Commit 8dda64fa3e
Changed files (2)
lib
std
os
bits
src
lib/std/os/bits/darwin.zig
@@ -1475,6 +1475,9 @@ pub const CLOCK_UPTIME_RAW_APPROX = 9;
pub const CLOCK_PROCESS_CPUTIME_ID = 12;
pub const CLOCK_THREAD_CPUTIME_ID = 16;
+/// Max open files per process
+/// https://opensource.apple.com/source/xnu/xnu-4903.221.2/bsd/sys/syslimits.h.auto.html
+pub const OPEN_MAX = 10240;
pub const RUSAGE_SELF = 0;
pub const RUSAGE_CHILDREN = -1;
src/main.zig
@@ -2986,6 +2986,14 @@ fn gimmeMoreOfThoseSweetSweetFileDescriptors() void {
const posix = std.os;
var lim = posix.getrlimit(.NOFILE) catch return; // Oh well; we tried.
+ if (std.Target.current.isDarwin()) {
+ // On Darwin, `NOFILE` is bounded by a hardcoded value `OPEN_MAX`.
+ // According to the man pages for setrlimit():
+ // setrlimit() now returns with errno set to EINVAL in places that historically succeeded.
+ // It no longer accepts "rlim_cur = RLIM_INFINITY" for RLIM_NOFILE.
+ // Use "rlim_cur = min(OPEN_MAX, rlim_max)".
+ lim.max = std.math.min(posix.darwin.OPEN_MAX, lim.max);
+ }
if (lim.cur == lim.max) return;
// Do a binary search for the limit.