diff options
author | neilbrown <neilbrown> | 2003-09-12 06:37:16 +0000 |
---|---|---|
committer | neilbrown <neilbrown> | 2003-09-12 06:37:16 +0000 |
commit | 06c962bc87aba28a3169be6a18ce8d52060b661f (patch) | |
tree | 016e5753871fc1f14ef0161c71ff458edeb46f1c /utils/statd/statd.c | |
parent | 2ff7a4def6b60f2d1868d3da2a537b90ee058d30 (diff) | |
download | nfs-utils-06c962bc87aba28a3169be6a18ce8d52060b661f.tar.gz nfs-utils-06c962bc87aba28a3169be6a18ce8d52060b661f.tar.xz nfs-utils-06c962bc87aba28a3169be6a18ce8d52060b661f.zip |
Work around RLIMIT_NOFILE-to-big problem
Diffstat (limited to 'utils/statd/statd.c')
-rw-r--r-- | utils/statd/statd.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/utils/statd/statd.c b/utils/statd/statd.c index 93c394f..b57f71b 100644 --- a/utils/statd/statd.c +++ b/utils/statd/statd.c @@ -18,6 +18,7 @@ #include <rpc/rpc.h> #include <rpc/pmap_clnt.h> #include <rpcmisc.h> +#include <sys/resource.h> #include <grp.h> #include "statd.h" #include "version.h" @@ -209,6 +210,7 @@ int main (int argc, char **argv) int pid; int arg; int port = 0, out_port = 0; + struct rlimit rlim; int pipefds[2] = { -1, -1}; char status; @@ -320,6 +322,21 @@ int main (int argc, char **argv) daemon mode. */ } + if (getrlimit (RLIMIT_NOFILE, &rlim) != 0) + fprintf(stderr, "%s: getrlimit (RLIMIT_NOFILE) failed: %s\n", + argv [0], strerror(errno)); + else { + /* glibc sunrpc code dies if getdtablesize > FD_SETSIZE */ + if (rlim.rlim_cur > FD_SETSIZE) { + rlim.rlim_cur = FD_SETSIZE; + + if (setrlimit (RLIMIT_NOFILE, &rlim) != 0) { + fprintf(stderr, "%s: setrlimit (RLIMIT_NOFILE) failed: %s\n", + argv [0], strerror(errno)); + } + } + } + #ifdef SIMULATIONS if (argc > 1) /* LH - I _really_ need to update simulator... */ |