Merge branch 'bug21074_029'

This commit is contained in:
Nick Mathewson 2018-01-16 14:13:39 -05:00
commit 454d854363
2 changed files with 11 additions and 7 deletions

View File

@ -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.

View File

@ -1675,7 +1675,7 @@ get_max_sockets(void)
* fail by returning -1 and <b>max_out</b> is untouched.
*
* 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().
*
* Otherwise, return 0 and store the maximum we found inside <b>max_out</b>
@ -1740,13 +1740,14 @@ set_max_file_descriptors(rlim_t limit, int *max_out)
rlim.rlim_cur = rlim.rlim_max;
if (setrlimit(RLIMIT_NOFILE, &rlim) != 0) {
int bad = 1;
int couldnt_set = 1;
const int setrlimit_errno = errno;
#ifdef OPEN_MAX
uint64_t try_limit = OPEN_MAX - ULIMIT_BUFFER;
if (errno == EINVAL && try_limit < (uint64_t) rlim.rlim_cur) {
/* On some platforms, OPEN_MAX is the real limit, and getrlimit() is
* full of nasty lies. I'm looking at you, OSX 10.5.... */
rlim.rlim_cur = try_limit;
rlim.rlim_cur = MIN(try_limit, rlim.rlim_cur);
if (setrlimit(RLIMIT_NOFILE, &rlim) == 0) {
if (rlim.rlim_cur < (rlim_t)limit) {
log_warn(LD_CONFIG, "We are limited to %lu file descriptors by "
@ -1761,14 +1762,13 @@ set_max_file_descriptors(rlim_t limit, int *max_out)
(unsigned long)try_limit, (unsigned long)OPEN_MAX,
(unsigned long)rlim.rlim_max);
}
bad = 0;
couldnt_set = 0;
}
}
#endif /* defined(OPEN_MAX) */
if (bad) {
if (couldnt_set) {
log_warn(LD_CONFIG,"Couldn't set maximum number of file descriptors: %s",
strerror(errno));
return -1;
strerror(setrlimit_errno));
}
}
/* leave some overhead for logs, etc, */