summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2013-03-19 14:27:00 -0400
committerNick Mathewson <nickm@torproject.org>2013-03-19 14:27:00 -0400
commit01af92fedead7589ac4272558d284e0e68de7ddd (patch)
tree1e0731dbc4af8a2c6dccd8d0a7afa2e38f5fb8bc /src/common
parent084c857704209572ca3dc9ffe8c1213189e35442 (diff)
parent8d29866bec821e188a411f78b8112d2097ed106c (diff)
downloadtor-01af92fedead7589ac4272558d284e0e68de7ddd.tar.gz
tor-01af92fedead7589ac4272558d284e0e68de7ddd.zip
Merge remote-tracking branch 'origin/maint-0.2.4'
Diffstat (limited to 'src/common')
-rw-r--r--src/common/compat.c29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/common/compat.c b/src/common/compat.c
index 4fa9fee42e..c97a4545c9 100644
--- a/src/common/compat.c
+++ b/src/common/compat.c
@@ -2313,8 +2313,33 @@ compute_num_cpus_impl(void)
return (int)info.dwNumberOfProcessors;
else
return -1;
-#elif defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_CONF)
- long cpus = sysconf(_SC_NPROCESSORS_CONF);
+#elif defined(HAVE_SYSCONF)
+#ifdef _SC_NPROCESSORS_CONF
+ long cpus_conf = sysconf(_SC_NPROCESSORS_CONF);
+#else
+ long cpus_conf = -1;
+#endif
+#ifdef _SC_NPROCESSORS_ONLN
+ long cpus_onln = sysconf(_SC_NPROCESSORS_ONLN);
+#else
+ long cpus_onln = -1;
+#endif
+ long cpus = -1;
+
+ if (cpus_conf > 0 && cpus_onln < 0) {
+ cpus = cpus_conf;
+ } else if (cpus_onln > 0 && cpus_conf < 0) {
+ cpus = cpus_onln;
+ } else if (cpus_onln > 0 && cpus_conf > 0) {
+ if (cpus_onln < cpus_conf) {
+ log_notice(LD_GENERAL, "I think we have %ld CPUS, but only %ld of them "
+ "are available. Telling Tor to only use %ld. You can over"
+ "ride this with the NumCPUs option",
+ cpus_conf, cpus_onln, cpus_onln);
+ }
+ cpus = cpus_onln;
+ }
+
if (cpus >= 1 && cpus < INT_MAX)
return (int)cpus;
else