diff --git a/CHANGES b/CHANGES index 9efd071d52..ae2d723b0b 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,5 @@ +2404. [port] hpux: files unlimited support. + 2403. [bug] TSIG context leak. [RT #18341] 2402. [port] Support Solaris 2.11 and over. [RT #18362] diff --git a/lib/isc/unix/resource.c b/lib/isc/unix/resource.c index b40878a063..a6280b7477 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.11.206.3.4.2 2008/07/23 12:03:53 marka Exp $ */ +/* $Id: resource.c,v 1.11.206.3.4.3 2008/07/28 22:45:53 marka Exp $ */ #include @@ -32,6 +32,10 @@ #include /* To get the large NR_OPEN. */ #endif +#ifdef __hpux +#include +#endif + #include "errno2result.h" static isc_result_t @@ -166,7 +170,25 @@ isc_resource_setlimit(isc_resource_t resource, isc_resourcevalue_t value) { if (unixresult == 0) return (ISC_R_SUCCESS); } +#elif defined(__hpux) + if (resource == isc_resource_openfiles && rlim_value == RLIM_INFINITY) { + uint64_t maxfiles; + if (gettune("maxfiles_lim", &maxfiles) == 0) { + rl.rlim_cur = rl.rlim_max = maxfiles; + unixresult = setrlimit(unixresource, &rl); + if (unixresult == 0) + return (ISC_R_SUCCESS); + } + } #endif + if (resource == isc_resource_openfiles && rlim_value == RLIM_INFINITY) { + if (getrlimit(unixresource, &rl) == 0) { + rl.rlim_cur = rl.rlim_max; + unixresult = setrlimit(unixresource, &rl); + if (unixresult == 0) + return (ISC_R_SUCCESS); + } + } return (isc__errno2result(errno)); }