]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Don't relaunch dir requests recursively if connection_connect() returns -1
authorNick Mathewson <nickm@torproject.org>
Tue, 17 Nov 2015 14:40:05 +0000 (09:40 -0500)
committerNick Mathewson <nickm@torproject.org>
Tue, 17 Nov 2015 14:40:05 +0000 (09:40 -0500)
Closes ticket 17589.

changes/bug17589 [new file with mode: 0644]
src/or/directory.c

diff --git a/changes/bug17589 b/changes/bug17589
new file mode 100644 (file)
index 0000000..9110327
--- /dev/null
@@ -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
index 6f8edb5ad4c84a54fff3da6ab4ce4d1a89c9200a..8d4c0a86d0d5531eab38f4b24bef2fa9ddf18a3d 100644 (file)
@@ -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 */