From 283a2b228508723d7cc9ee65e840b9b8cbadbbbe Mon Sep 17 00:00:00 2001 From: Antonio SJ Musumeci Date: Tue, 17 Feb 2015 11:46:54 -0500 Subject: [PATCH] Try RLIMIT_INFINITY first, then cur = max, then loop and try to increase till error. closes #50 --- src/resources.cpp | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/resources.cpp b/src/resources.cpp index 5759c2d2..6f31429a 100644 --- a/src/resources.cpp +++ b/src/resources.cpp @@ -42,25 +42,29 @@ namespace mergerfs int maxout_rlimit(int resource) { + int rv; struct rlimit rlim; - if(geteuid() == 0) - { - rlim.rlim_cur = RLIM_INFINITY; - rlim.rlim_max = RLIM_INFINITY; - } - else - { - int rv; + rlim.rlim_cur = RLIM_INFINITY; + rlim.rlim_max = RLIM_INFINITY; + rv = ::setrlimit(resource,&rlim); + if(rv == 0) + return 0; - rv = ::getrlimit(resource,&rlim); - if(rv == -1) - return -1; + rv = ::getrlimit(resource,&rlim); + if(rv == -1) + return -1; - rlim.rlim_cur = rlim.rlim_max; + rv = 0; + rlim.rlim_cur = rlim.rlim_max; + while(rv == 0) + { + rv = ::setrlimit(resource,&rlim); + rlim.rlim_max *= 2; + rlim.rlim_cur = rlim.rlim_max; } - return ::setrlimit(resource,&rlim); + return rv; } int