diff options
| author | crueter <crueter@eden-emu.dev> | 2026-05-31 04:13:56 +0200 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2026-05-31 04:13:56 +0200 |
| commit | b7fcec49854761b4c86232ee45d6ec8e47ef8d67 (patch) | |
| tree | a8600acbea6dd87d66ec11e369dbeecb8ac164fe /src | |
| parent | 0473747f9460a7180227e8e14fbeee73905d74c0 (diff) | |
[desktop] Increase rlimit on UNIX/Apple (#4030)
Sets max open fd limit to 8192 on non-windows platforms (or bounds it to
the system hard limit). Complement to the previous VFS PR.
Signed-off-by: crueter <crueter@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4030
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Diffstat (limited to 'src')
| -rw-r--r-- | src/yuzu/main.cpp | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index b4472bff11..29a1f075fa 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -15,6 +15,10 @@ #include "qt_common/gui_settings.h" #endif +#ifndef _WIN32 +#include <sys/resource.h> +#endif + #include "main_window.h" #ifdef _WIN32 @@ -106,16 +110,27 @@ int main(int argc, char* argv[]) { QCoreApplication::setOrganizationName(QStringLiteral("eden")); QCoreApplication::setApplicationName(QStringLiteral("eden")); -#ifdef _WIN32 // Increases the maximum open file limit. + // TODO: This should be common to all frontends. +#ifdef _WIN32 // MSVCRT limits this to 2048 for some inexplicable (and likely arcane) reason, // so we have to account for that as well. #ifdef __MSVCRT__ _setmaxstdio(2048); #else _setmaxstdio(8192); -#endif -#elif defined(__APPLE__) +#endif // __MSVCRT__ +#elif defined(__unix__) || defined(__APPLE__) + // Set the max open file limit to 8192, or the hard limit. + // Most sane systems should not hit the hard limit here. + struct rlimit rl; + if (getrlimit(RLIMIT_NOFILE, &rl) == 0) { + rl.rlim_cur = std::min<rlim_t>(8192, rl.rlim_max); + setrlimit(RLIMIT_NOFILE, &rl); + } +#endif // _WIN32 + +#if defined(__APPLE__) // If you start a bundle (binary) on OSX without the Terminal, the working directory is "/". // But since we require the working directory to be the executable path for the location of // the user folder in the Qt Frontend, we need to cd into that working directory |
