diff options
author | android-build-prod (mdb) <android-build-team-robot@google.com> | 2021-03-05 16:58:43 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2021-03-05 16:58:43 +0000 |
commit | 2a986922f3e02a987e91f0ecc1cc1501f9bd36d6 (patch) | |
tree | 4cc06eefa8ddbce6563ab746c1c9386fe476501e | |
parent | 612400d5b38129f25a038432651a880ba2af95f8 (diff) | |
parent | 934acebdc4cb8d635c9aa3ad71dcab53f2b1ef8c (diff) | |
download | qemu-snap-temp-L55300000829965326.tar.gz |
Merge "Merge cherrypicks of [1621320] into emu-30-release" into emu-30-releasesparse-7187391-L27400000829974921snap-temp-L55300000829965326
-rwxr-xr-x | android-qemu2-glue/main.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/android-qemu2-glue/main.cpp b/android-qemu2-glue/main.cpp index cba43c4cfc..2971fd9af2 100755 --- a/android-qemu2-glue/main.cpp +++ b/android-qemu2-glue/main.cpp @@ -120,6 +120,10 @@ extern "C" { #include <string> #include <thread> +#ifdef __APPLE__ +#include <sys/resource.h> +#endif + #include "android/version.h" #define D(...) \ do { \ @@ -1144,10 +1148,52 @@ static int startEmulatorWithMinConfig( extern "C" AndroidProxyCB* gAndroidProxyCB; extern "C" int main(int argc, char** argv) { + if (argc < 1) { fprintf(stderr, "Invalid invocation (no program path)\n"); return 1; } + +#ifdef __APPLE__ + { + int ret; + struct rlimit rl; + static constexpr rlim_t kDesiredFileLimit = 16384; + rlim_t desiredLimit = kDesiredFileLimit; + bool raiseLimit = true; + ret = getrlimit(RLIMIT_NOFILE, &rl); + + if (0 == ret) { + D("Num files limit: cur max %u %u", rl.rlim_cur, rl.rlim_max); + if (desiredLimit < rl.rlim_cur) { + raiseLimit = false; + D("Current limit already high enough, don't raise limit."); + } else if (desiredLimit > rl.rlim_max) { + desiredLimit = rl.rlim_max; + D("Target files limit: %u", desiredLimit); + } + } else { + fprintf(stderr, "%s: Failed to query files limit. errno %d\n", __func__, errno); + } + + if (raiseLimit) { + rl.rlim_cur = desiredLimit; + ret = setrlimit(RLIMIT_NOFILE, &rl); + if (0 == ret) { + D("Raised open files limit to %u\n", __func__, desiredLimit); + } else { + fprintf(stderr, "%s: Failed to raise files limit. errno %d\n", __func__, errno); + } + ret = getrlimit(RLIMIT_NOFILE, &rl); + if (0 == ret) { + D("Num files limit (after): cur max %u %u\n", __func__, rl.rlim_cur, rl.rlim_max); + } else { + fprintf(stderr, "%s: Failed to query files limit. errno %d\n", __func__, errno); + } + } + } +#endif + #ifdef CONFIG_HEADLESS host_emulator_is_headless = 1; D("emulator running in headless mode"); |