[tor-commits] [tor/master] Don't relaunch dir requests recursively if connection_connect() returns -1

nickm at torproject.org nickm at torproject.org
Wed Nov 25 14:21:52 UTC 2015


commit dc0d2b59706d036b97451dc1f8addc86ed783c2e
Author: Nick Mathewson <nickm at torproject.org>
Date:   Tue Nov 17 09:40:05 2015 -0500

    Don't relaunch dir requests recursively if connection_connect() returns -1
    
    Closes ticket 17589.
---
 changes/bug17589   |    7 +++++++
 src/or/directory.c |    5 +----
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/changes/bug17589 b/changes/bug17589
new file mode 100644
index 0000000..9110327
--- /dev/null
+++ b/changes/bug17589
@@ -0,0 +1,7 @@
+  o Code simplificiation and refactoring:
+    - When a direct directory request fails immediately on launch,
+      instead of relaunching that request from inside the code that
+      launches it, instead mark the connection for teardown. This
+      change simplifies Tor's callback and prevents the directory-
+      request launching code from invoking itself recursively.
+      Closes ticket 17589.
\ No newline at end of file
diff --git a/src/or/directory.c b/src/or/directory.c
index 6f8edb5..8d4c0a8 100644
--- a/src/or/directory.c
+++ b/src/or/directory.c
@@ -991,10 +991,7 @@ directory_initiate_command_rend(const tor_addr_t *_addr,
     switch (connection_connect(TO_CONN(conn), conn->base_.address, &addr,
                                dir_port, &socket_error)) {
       case -1:
-        connection_dir_request_failed(conn); /* retry if we want */
-        /* XXX we only pass 'conn' above, not 'resource', 'payload',
-         * etc. So in many situations it can't retry! -RD */
-        connection_free(TO_CONN(conn));
+        connection_mark_for_close(TO_CONN(conn));
         return;
       case 1:
         /* start flushing conn */





More information about the tor-commits mailing list