aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-prod (mdb) <android-build-team-robot@google.com>2021-03-05 16:58:43 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2021-03-05 16:58:43 +0000
commit2a986922f3e02a987e91f0ecc1cc1501f9bd36d6 (patch)
tree4cc06eefa8ddbce6563ab746c1c9386fe476501e
parent612400d5b38129f25a038432651a880ba2af95f8 (diff)
parent934acebdc4cb8d635c9aa3ad71dcab53f2b1ef8c (diff)
downloadqemu-snap-temp-L55300000829965326.tar.gz
Merge "Merge cherrypicks of [1621320] into emu-30-release" into emu-30-releasesparse-7187391-L27400000829974921snap-temp-L55300000829965326
-rwxr-xr-xandroid-qemu2-glue/main.cpp46
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");