aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2024-10-15 02:54:27 -0400
committerRoger Dingledine <arma@torproject.org>2024-10-15 15:59:25 -0400
commit7cca6dc1a36ff201eaab62a11699259e3ef9ce22 (patch)
treecf7b07edf2ccb80f09be3424cc4af1ee348ad4c2
parent6feaea8fa44d4594388232f4e104a7c656013e19 (diff)
downloadtor-7cca6dc1a36ff201eaab62a11699259e3ef9ce22.tar.gz
tor-7cca6dc1a36ff201eaab62a11699259e3ef9ce22.zip
don't build preemptive conflux circuits if no predicted ports
Conflux circuit building was ignoring the "predicted ports" feature, which aims to make Tor stop building circuits if there have been no user requests lately. This bug led to every idle Tor on the network building and discarding circuits every 30 seconds, which added overall load to the network, used bandwidth and battery from clients that weren't actively using their Tor, and kept sockets open on guards which added connection padding essentially forever. Bug went in on commit 39c2927d when we added preemptive conflux circuit pools. Fixes bug 40981; bugfix on 0.4.8.1-alpha.
-rw-r--r--changes/bug409819
-rw-r--r--src/core/or/circuituse.c9
2 files changed, 16 insertions, 2 deletions
diff --git a/changes/bug40981 b/changes/bug40981
new file mode 100644
index 0000000000..7979685c35
--- /dev/null
+++ b/changes/bug40981
@@ -0,0 +1,9 @@
+ o Major bugfixes (circuit building):
+ - Conflux circuit building was ignoring the "predicted ports" feature,
+ which aims to make Tor stop building circuits if there have been
+ no user requests lately. This bug led to every idle Tor on the
+ network building and discarding circuits every 30 seconds, which
+ added overall load to the network, used bandwidth and battery from
+ clients that weren't actively using their Tor, and kept sockets open
+ on guards which added connection padding essentially forever. Fixes
+ bug 40981; bugfix on 0.4.8.1-alpha;
diff --git a/src/core/or/circuituse.c b/src/core/or/circuituse.c
index ac9005e1d4..abfb51c662 100644
--- a/src/core/or/circuituse.c
+++ b/src/core/or/circuituse.c
@@ -1202,8 +1202,13 @@ circuit_predict_and_launch_new(void)
int flags = 0;
/* Attempt to launch predicted conflux circuits. This is outside the HS or
- * Exit preemptive circuit set. */
- conflux_predict_new(now);
+ * Exit preemptive circuit set.
+ * As with the other types of preemptive circuits, we only want to
+ * launch them if we have predicted ports. (If we haven't needed a
+ * circuit for a while, maybe we won't need one soon either.) */
+ if (predicted_ports_prediction_time_remaining(now)) {
+ conflux_predict_new(now);
+ }
/* Count how many of each type of circuit we currently have. */
SMARTLIST_FOREACH_BEGIN(circuit_get_global_list(), circuit_t *, circ) {