diff options
Diffstat (limited to 'source3/smbd')
-rw-r--r-- | source3/smbd/files.c | 35 |
1 files changed, 8 insertions, 27 deletions
diff --git a/source3/smbd/files.c b/source3/smbd/files.c index 4000439db0..6afa059753 100644 --- a/source3/smbd/files.c +++ b/source3/smbd/files.c @@ -202,38 +202,19 @@ initialise file structures void file_init(void) { - real_max_open_files = lp_max_open_files(); - -#if (defined(HAVE_GETRLIMIT) && defined(RLIMIT_NOFILE)) - { - struct rlimit rlp; - getrlimit(RLIMIT_NOFILE, &rlp); - /* Set the fd limit to be real_max_open_files + MAX_OPEN_FUDGEFACTOR to - * account for the extra fd we need - * as well as the log files and standard - * handles etc. */ - rlp.rlim_cur = (real_max_open_files+MAX_OPEN_FUDGEFACTOR>rlp.rlim_max)? - rlp.rlim_max:real_max_open_files+MAX_OPEN_FUDGEFACTOR; - setrlimit(RLIMIT_NOFILE, &rlp); - getrlimit(RLIMIT_NOFILE, &rlp); - if(rlp.rlim_cur != (real_max_open_files + MAX_OPEN_FUDGEFACTOR)) - DEBUG(0,("file_init: Maximum number of open files requested per session \ -was %d, actual files available per session = %d\n", - real_max_open_files, (int)rlp.rlim_cur - MAX_OPEN_FUDGEFACTOR )); - - DEBUG(2,("Maximum number of open files per session is %d\n", - (int)rlp.rlim_cur - MAX_OPEN_FUDGEFACTOR)); - - real_max_open_files = (int)rlp.rlim_cur - MAX_OPEN_FUDGEFACTOR; - } -#endif + int real_max_open_files, lim; - file_bmap = bitmap_allocate(real_max_open_files); + lim = set_maxfiles(); + lim = MIN(lim, lp_max_open_files()); + real_max_open_files = lim - MAX_OPEN_FUDGEFACTOR; + + file_bmap = bitmap_allocate(real_max_open_files); + if (!file_bmap) { exit_server("out of memory in file_init"); } - + /* * Ensure that pipe_handle_oppset is set correctly. */ |