summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2017-12-07 08:42:49 -0500
committerNick Mathewson <nickm@torproject.org>2017-12-07 08:42:49 -0500
commit4b41ffa64d251268602b06552a53da8cbd60af5c (patch)
treeb6781f3b3273a1c4b6eccc243486b0e1c1b12f43
parentd4ca18573ccd0164f4d867e41a8f453119ce421f (diff)
parent13049a9866311b30d43b6b8268e57b9631b591f3 (diff)
downloadtor-4b41ffa64d251268602b06552a53da8cbd60af5c.tar.gz
tor-4b41ffa64d251268602b06552a53da8cbd60af5c.zip
Merge branch 'arthuredelstein_18859+1_031' into maint-0.3.2
-rw-r--r--changes/bug188597
-rw-r--r--src/or/circuituse.c6
2 files changed, 12 insertions, 1 deletions
diff --git a/changes/bug18859 b/changes/bug18859
new file mode 100644
index 0000000000..1fe5bc2107
--- /dev/null
+++ b/changes/bug18859
@@ -0,0 +1,7 @@
+ o Major bugfixes (circuit prediction):
+ - Fix circuit prediction logic so that a client doesn't treat a stream as
+ being "handled" by a circuit if that circuit already has isolation
+ settings on it that might make it incompatible with the stream. This
+ change should make Tor clients more responsive by improving their
+ chances of having a pre-created circuit ready for use when a new client
+ request arrives. Fixes bug 18859; bugfix on 0.2.3.3-alpha.
diff --git a/src/or/circuituse.c b/src/or/circuituse.c
index aa0df95652..ebaa46e301 100644
--- a/src/or/circuituse.c
+++ b/src/or/circuituse.c
@@ -1001,7 +1001,7 @@ circuit_remove_handled_ports(smartlist_t *needed_ports)
tor_assert(*port);
if (circuit_stream_is_being_handled(NULL, *port,
MIN_CIRCUITS_HANDLING_STREAM)) {
-// log_debug(LD_CIRC,"Port %d is already being handled; removing.", port);
+ log_debug(LD_CIRC,"Port %d is already being handled; removing.", *port);
smartlist_del(needed_ports, i--);
tor_free(port);
} else {
@@ -1038,6 +1038,10 @@ circuit_stream_is_being_handled(entry_connection_t *conn,
continue;
if (origin_circ->unusable_for_new_conns)
continue;
+ if (origin_circ->isolation_values_set &&
+ (conn == NULL ||
+ !connection_edge_compatible_with_circuit(conn, origin_circ)))
+ continue;
exitnode = build_state_get_exit_node(build_state);
if (exitnode && (!need_uptime || build_state->need_uptime)) {