diff --git a/src/mono/mono/mini/driver.c b/src/mono/mono/mini/driver.c index 34c6609652adf..5fbb7687003b5 100644 --- a/src/mono/mono/mini/driver.c +++ b/src/mono/mono/mini/driver.c @@ -65,7 +65,7 @@ #include #include #include -#if TARGET_OSX +#ifdef HAVE_SYS_RESOURCE_H # include #endif @@ -1905,24 +1905,29 @@ switch_gc (char* argv[], const char* target_gc) #endif } -#ifdef TARGET_OSX - -/* - * tries to increase the minimum number of files, if the number is below 1024 - */ static void -darwin_change_default_file_handles () +increase_descriptor_limit (void) { +#if defined(HAVE_GETRLIMIT) && !defined(DONT_SET_RLIMIT_NOFILE) struct rlimit limit; - if (getrlimit (RLIMIT_NOFILE, &limit) == 0){ - if (limit.rlim_cur < 1024){ - limit.rlim_cur = MAX(1024,limit.rlim_cur); - setrlimit (RLIMIT_NOFILE, &limit); - } + if (getrlimit (RLIMIT_NOFILE, &limit) == 0) { + // Set our soft limit for file descriptors to be the same + // as the max limit. + limit.rlim_cur = limit.rlim_max; +#ifdef __APPLE__ + // Based on compatibility note in setrlimit(2) manpage for OSX, + // trim the limit to OPEN_MAX. + if (limit.rlim_cur > OPEN_MAX) + limit.rlim_cur = OPEN_MAX; +#endif + setrlimit (RLIMIT_NOFILE, &limit); } +#endif } +#ifdef TARGET_OSX + static void switch_arch (char* argv[], const char* target_arch) { @@ -2079,9 +2084,7 @@ mono_main (int argc, char* argv[]) setlocale (LC_ALL, ""); -#if TARGET_OSX - darwin_change_default_file_handles (); -#endif + increase_descriptor_limit (); if (g_hasenv ("MONO_NO_SMP")) mono_set_use_smp (FALSE);