Merge branch 'maint-0.3.1' into release-0.3.1
This commit is contained in:
commit
cf55f0516c
|
@ -0,0 +1,4 @@
|
||||||
|
o Minor bugfixes:
|
||||||
|
- Don't exit the Tor process if setrlimit() fails to change the file
|
||||||
|
limit (which can happen sometimes on some versions of OSX). Fixes
|
||||||
|
bug 21074; bugfix on 0.0.9pre5.
|
|
@ -1665,7 +1665,7 @@ get_max_sockets(void)
|
||||||
* fail by returning -1 and <b>max_out</b> is untouched.
|
* fail by returning -1 and <b>max_out</b> is untouched.
|
||||||
*
|
*
|
||||||
* If we are unable to set the limit value because of setrlimit() failing,
|
* If we are unable to set the limit value because of setrlimit() failing,
|
||||||
* return -1 and <b>max_out</b> is set to the current maximum value returned
|
* return 0 and <b>max_out</b> is set to the current maximum value returned
|
||||||
* by getrlimit().
|
* by getrlimit().
|
||||||
*
|
*
|
||||||
* Otherwise, return 0 and store the maximum we found inside <b>max_out</b>
|
* Otherwise, return 0 and store the maximum we found inside <b>max_out</b>
|
||||||
|
@ -1730,13 +1730,14 @@ set_max_file_descriptors(rlim_t limit, int *max_out)
|
||||||
rlim.rlim_cur = rlim.rlim_max;
|
rlim.rlim_cur = rlim.rlim_max;
|
||||||
|
|
||||||
if (setrlimit(RLIMIT_NOFILE, &rlim) != 0) {
|
if (setrlimit(RLIMIT_NOFILE, &rlim) != 0) {
|
||||||
int bad = 1;
|
int couldnt_set = 1;
|
||||||
|
const int setrlimit_errno = errno;
|
||||||
#ifdef OPEN_MAX
|
#ifdef OPEN_MAX
|
||||||
uint64_t try_limit = OPEN_MAX - ULIMIT_BUFFER;
|
uint64_t try_limit = OPEN_MAX - ULIMIT_BUFFER;
|
||||||
if (errno == EINVAL && try_limit < (uint64_t) rlim.rlim_cur) {
|
if (errno == EINVAL && try_limit < (uint64_t) rlim.rlim_cur) {
|
||||||
/* On some platforms, OPEN_MAX is the real limit, and getrlimit() is
|
/* On some platforms, OPEN_MAX is the real limit, and getrlimit() is
|
||||||
* full of nasty lies. I'm looking at you, OSX 10.5.... */
|
* full of nasty lies. I'm looking at you, OSX 10.5.... */
|
||||||
rlim.rlim_cur = try_limit;
|
rlim.rlim_cur = MIN((rlim_t) try_limit, rlim.rlim_cur);
|
||||||
if (setrlimit(RLIMIT_NOFILE, &rlim) == 0) {
|
if (setrlimit(RLIMIT_NOFILE, &rlim) == 0) {
|
||||||
if (rlim.rlim_cur < (rlim_t)limit) {
|
if (rlim.rlim_cur < (rlim_t)limit) {
|
||||||
log_warn(LD_CONFIG, "We are limited to %lu file descriptors by "
|
log_warn(LD_CONFIG, "We are limited to %lu file descriptors by "
|
||||||
|
@ -1751,14 +1752,13 @@ set_max_file_descriptors(rlim_t limit, int *max_out)
|
||||||
(unsigned long)try_limit, (unsigned long)OPEN_MAX,
|
(unsigned long)try_limit, (unsigned long)OPEN_MAX,
|
||||||
(unsigned long)rlim.rlim_max);
|
(unsigned long)rlim.rlim_max);
|
||||||
}
|
}
|
||||||
bad = 0;
|
couldnt_set = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* OPEN_MAX */
|
#endif /* OPEN_MAX */
|
||||||
if (bad) {
|
if (couldnt_set) {
|
||||||
log_warn(LD_CONFIG,"Couldn't set maximum number of file descriptors: %s",
|
log_warn(LD_CONFIG,"Couldn't set maximum number of file descriptors: %s",
|
||||||
strerror(errno));
|
strerror(setrlimit_errno));
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* leave some overhead for logs, etc, */
|
/* leave some overhead for logs, etc, */
|
||||||
|
|
Loading…
Reference in New Issue