mirror of
https://github.com/samba-team/samba.git
synced 2025-01-13 13:18:06 +03:00
added a function set_maxfiles() to set our file rlimit to the max
possible and return the max.
This commit is contained in:
parent
6a1b346d98
commit
7a7b5ee168
@ -347,6 +347,7 @@ char *sid_to_string(pstring sidstr_out, DOM_SID *sid);
|
||||
BOOL string_to_sid(DOM_SID *sidout, char *sidstr);
|
||||
int str_checksum(const char *s);
|
||||
void zero_free(void *p, size_t size);
|
||||
int set_maxfiles(void);
|
||||
|
||||
/*The following definitions come from libsmb/clientgen.c */
|
||||
|
||||
|
@ -4845,3 +4845,26 @@ void zero_free(void *p, size_t size)
|
||||
free(p);
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************
|
||||
set our open file limit to the max and return the limit
|
||||
*****************************************************************/
|
||||
int set_maxfiles(void)
|
||||
{
|
||||
#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 = rlp.rlim_max;
|
||||
setrlimit(RLIMIT_NOFILE, &rlp);
|
||||
getrlimit(RLIMIT_NOFILE, &rlp);
|
||||
return rlp.rlim_cur;
|
||||
#else
|
||||
/* just guess ... */
|
||||
return 1024;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -202,38 +202,19 @@ initialise file structures
|
||||
|
||||
void file_init(void)
|
||||
{
|
||||
real_max_open_files = lp_max_open_files();
|
||||
int real_max_open_files, lim;
|
||||
|
||||
#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
|
||||
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.
|
||||
*/
|
||||
|
@ -87,6 +87,8 @@ void smbw_init(void)
|
||||
DEBUG(4,("Initial cwd from getwd is %s\n", smb_cwd));
|
||||
}
|
||||
smbw_busy--;
|
||||
|
||||
set_maxfiles();
|
||||
}
|
||||
|
||||
/*****************************************************
|
||||
|
Loading…
Reference in New Issue
Block a user