[tor-commits] [tor/main] don't cache connect failures from our own circuits

dgoulet at torproject.org dgoulet at torproject.org
Wed Feb 23 20:22:45 UTC 2022


commit 5ad126a51bdfaeecc81b1cb6517abd2d5e039fad
Author: Roger Dingledine <arma at torproject.org>
Date:   Tue Oct 26 05:40:38 2021 -0400

    don't cache connect failures from our own circuits
    
    The connect failure cache had a bad interaction with retrying connections
    to our guards or bridges when we go offline and then come back online --
    while offline we would fail to connect and cache this result, and then
    when we return we would decline to even attempt to connect, because our
    failure cache said it wouldn't work.
    
    Now only cache connect failures for relays when we connected to them
    because of somebody else's EXTEND request.
    
    Fixes bug 40499; bugfix on 0.3.3.4-alpha.
---
 changes/bug40499            | 7 +++++++
 src/core/or/connection_or.c | 7 +++++++
 2 files changed, 14 insertions(+)

diff --git a/changes/bug40499 b/changes/bug40499
new file mode 100644
index 0000000000..149e9bd200
--- /dev/null
+++ b/changes/bug40499
@@ -0,0 +1,7 @@
+  o Major bugfixes (client):
+    - Stop caching TCP connect failures to relays/bridges when we
+      initiated the connection as a client. Now we only cache connect
+      failures as a relay or bridge when we initiated them because
+      of an EXTEND request. Declining to re-attempt the client-based
+      connections could cause problems when we lose connectivity and
+      try to reconnect. Fixes bug 40499; bugfix on 0.3.3.4-alpha.
diff --git a/src/core/or/connection_or.c b/src/core/or/connection_or.c
index db9f93e6f6..0018b1dfd8 100644
--- a/src/core/or/connection_or.c
+++ b/src/core/or/connection_or.c
@@ -1316,6 +1316,13 @@ note_or_connect_failed(const or_connection_t *or_conn)
 
   tor_assert(or_conn);
 
+  if (or_conn->potentially_used_for_bootstrapping) {
+    /* Don't cache connection failures for connections we initiated ourself.
+     * If these direct connections fail, we're supposed to recognize that
+     * the destination is down and stop trying. See ticket 40499. */
+    return;
+  }
+
   ocf = or_connect_failure_find(or_conn);
   if (ocf == NULL) {
     ocf = or_connect_failure_new(or_conn);





More information about the tor-commits mailing list