From: Mark Andrews Date: Mon, 21 Jul 2008 03:37:17 +0000 (+0000) Subject: 2395. [port] Avoid warning and no effect from "files unlimited" X-Git-Tag: v9.3.6b1~36^2~77 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=ee6c0ce79e83039c9f8692bfb6196e0bb591ff98;p=thirdparty%2Fbind9.git 2395. [port] Avoid warning and no effect from "files unlimited" on Linux when running as root. [RT #18335] --- diff --git a/CHANGES b/CHANGES index 2bb971bd12f..d47916987fa 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +2395. [port] Avoid warning and no effect from "files unlimited" + on Linux when running as root. [RT #18335] + 2394. [bug] Default configuration options set the limit for open files to 'unlimited' as described in the documentation. [RT #18331] diff --git a/lib/isc/unix/resource.c b/lib/isc/unix/resource.c index aaaec1b6ffc..f422cb18766 100644 --- a/lib/isc/unix/resource.c +++ b/lib/isc/unix/resource.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: resource.c,v 1.18 2008/07/11 23:05:46 jinmei Exp $ */ +/* $Id: resource.c,v 1.19 2008/07/21 03:37:17 marka Exp $ */ #include @@ -28,6 +28,10 @@ #include #include +#ifdef __linux__ +#include /* To get the large NR_OPEN. */ +#endif + #include "errno2result.h" static isc_result_t @@ -151,6 +155,17 @@ isc_resource_setlimit(isc_resource_t resource, isc_resourcevalue_t value) { if (unixresult == 0) return (ISC_R_SUCCESS); } +#elif defined(NR_OPEN) && defined(__linux__) + /* + * Some Linux kernels don't accept RLIM_INFINIT; the maximum + * possible value is the NR_OPEN defined in linux/fs.h. + */ + if (resource == isc_resource_openfiles && rlim_value == RLIM_INFINITY) { + rl.rlim_cur = rl.rlim_max = NR_OPEN; + unixresult = setrlimit(unixresource, &rl); + if (unixresult == 0) + return (ISC_R_SUCCESS); + } #endif return (isc__errno2result(errno)); }