diff options
author | Nick Mathewson <nickm@torproject.org> | 2017-07-05 11:16:51 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2017-07-05 11:16:51 -0400 |
commit | e04cc7e27fdc4ae4767ec29be08609a5e3540f83 (patch) | |
tree | 298e8c99fd67e0e986253a95958db9d74de20d14 | |
parent | cd77ea782ede057c2086f25b3e2084c78dbde805 (diff) | |
parent | e88aa98451e5fe28b2840cf218dba67e4596aa56 (diff) | |
download | tor-e04cc7e27fdc4ae4767ec29be08609a5e3540f83.tar.gz tor-e04cc7e27fdc4ae4767ec29be08609a5e3540f83.zip |
Merge branch 'maint-0.3.1'
-rw-r--r-- | changes/bug22797 | 4 | ||||
-rw-r--r-- | src/common/compat.c | 19 |
2 files changed, 16 insertions, 7 deletions
diff --git a/changes/bug22797 b/changes/bug22797 new file mode 100644 index 0000000000..619baaa409 --- /dev/null +++ b/changes/bug22797 @@ -0,0 +1,4 @@ + o Minor bugfixes (file limits): + - When setting the maximum number of connections allowed by the OS, + always allow some extra file descriptors for other files. + Fixes bug 22797; bugfix on 0.2.0.10-alpha. diff --git a/src/common/compat.c b/src/common/compat.c index 4f38c64714..acd2df7c6e 100644 --- a/src/common/compat.c +++ b/src/common/compat.c @@ -1732,19 +1732,24 @@ set_max_file_descriptors(rlim_t limit, int *max_out) if (setrlimit(RLIMIT_NOFILE, &rlim) != 0) { int bad = 1; #ifdef OPEN_MAX - if (errno == EINVAL && OPEN_MAX < rlim.rlim_cur) { + uint64_t try_limit = OPEN_MAX - ULIMIT_BUFFER; + if (errno == EINVAL && try_limit < 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 = OPEN_MAX; + rlim.rlim_cur = try_limit; 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 " - "OPEN_MAX, and ConnLimit is %lu. Changing ConnLimit; sorry.", - (unsigned long)OPEN_MAX, (unsigned long)limit); + "OPEN_MAX (%lu), and ConnLimit is %lu. Changing " + "ConnLimit; sorry.", + (unsigned long)try_limit, (unsigned long)OPEN_MAX, + (unsigned long)limit); } else { - log_info(LD_CONFIG, "Dropped connection limit to OPEN_MAX (%lu); " - "Apparently, %lu was too high and rlimit lied to us.", - (unsigned long)OPEN_MAX, (unsigned long)rlim.rlim_max); + log_info(LD_CONFIG, "Dropped connection limit to %lu based on " + "OPEN_MAX (%lu); Apparently, %lu was too high and rlimit " + "lied to us.", + (unsigned long)try_limit, (unsigned long)OPEN_MAX, + (unsigned long)rlim.rlim_max); } bad = 0; } |