diff options
Diffstat (limited to 'src/fs.zig')
-rw-r--r-- | src/fs.zig | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/fs.zig b/src/fs.zig index 517dcdbd5..2313dc17b 100644 --- a/src/fs.zig +++ b/src/fs.zig @@ -541,16 +541,22 @@ pub const FileSystem = struct { } // Always try to max out how many files we can keep open - pub fn adjustUlimit() usize { - var limit = std.os.getrlimit(.NOFILE) catch return 32; - if (limit.cur < limit.max) { - var new_limit = std.mem.zeroes(std.os.rlimit); - new_limit.cur = limit.max; - new_limit.max = limit.max; - std.os.setrlimit(.NOFILE, new_limit) catch return limit.cur; - return new_limit.cur; + pub fn adjustUlimit() !usize { + const LIMITS = [_]std.os.rlimit_resource{std.os.rlimit_resource.STACK, std.os.rlimit_resource.NOFILE}; + inline for (LIMITS) |limit_type, i| { + const limit = try std.os.getrlimit(limit_type); + + if (limit.cur < limit.max) { + var new_limit = std.mem.zeroes(std.os.rlimit); + new_limit.cur = limit.max; + new_limit.max = limit.max; + + try std.os.setrlimit(limit_type, new_limit); + + } + + if (i == LIMITS.len - 1) return limit.max; } - return limit.cur; } var _entries_option_map: *EntriesOption.Map = undefined; @@ -559,7 +565,7 @@ pub const FileSystem = struct { allocator: *std.mem.Allocator, cwd: string, ) RealFS { - const file_limit = adjustUlimit(); + const file_limit = adjustUlimit() catch unreachable; if (!_entries_option_map_loaded) { _entries_option_map = EntriesOption.Map.init(allocator); |