setrlimit не работает на OS X Maverick и Yosemite

Я работаю в компании над написанием аудио плагинов для различных программ, и в настоящее время у меня возникает следующая проблема с Logic для Os X Mavericks и Yosemite.
Logic сканирует все наши плагины и в какой-то момент больше не может получить доступ к файлам. Значение errno равно 24, что означает «слишком много открытых файлов»

В нашем коде есть следующие строки, которые увеличивают количество доступных файловых дескрипторов:

struct rlimit limit;
if (::getrlimit(RLIMIT_NOFILE, &limit) == 0)
{
limit.rlim_cur = (in_maxOpenFiles);
setrlimit(RLIMIT_NOFILE, &SetLimit);
}

И я тоже попробовал:

struct rlimit limit;
if (::getrlimit(RLIMIT_NOFILE, &limit) == 0)
{
limit.rlim_cur = (in_maxOpenFiles);
limit.rlim_max = (in_maxOpenFiles);
setrlimit(RLIMIT_NOFILE, &SetLimit);
}

И все же это не помогло.
Самое смешное, что если я открою терминал и запусту следующую команду:

ulimit -n 1024

и затем я запускаю логику из терминала в терминале, все в порядке и нет проблем с дескриптором!

Теперь я подумал, что setrlimit должен делать то же самое, что и setrlimit, нет?
Что я делаю неправильно?

Постскриптум Я также попробовал это решение:
https://unix.stackexchange.com/questions/108174/how-to-persist-ulimit-settings-in-osx-mavericks

Это не помогло.

1

Решение

В конце концов я нашел решение своей проблемы в этой статье:
http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/#Mac-OS-X

Вот также решение (для Maverick, а не Yosemite):
https://unix.stackexchange.com/questions/108174/how-to-persist-ulimit-settings-in-osx-mavericks

Тем не менее, до сих пор неясно, почему setrlimit выходит из строя. Вероятно, ошибка OS X (или функция).

0

Другие решения


По вопросам рекламы [email protected]