summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2015-11-25 09:21:25 -0500
committerNick Mathewson <nickm@torproject.org>2015-11-25 09:21:25 -0500
commitfe8eb9b366d9dccf06d8d4ce117b67bbb3aeba60 (patch)
tree12c8d33f362544f0fee49a57df34821fe387ebfd
parent45caeec9a03d7caca13ef4d6caeda23f7bb3129e (diff)
parentdc0d2b59706d036b97451dc1f8addc86ed783c2e (diff)
downloadtor-fe8eb9b366d9dccf06d8d4ce117b67bbb3aeba60.tar.gz
tor-fe8eb9b366d9dccf06d8d4ce117b67bbb3aeba60.zip
Merge remote-tracking branch 'public/decouple_dir_request_failed'
-rw-r--r--changes/bug175897
-rw-r--r--src/or/directory.c5
2 files changed, 8 insertions, 4 deletions
diff --git a/changes/bug17589 b/changes/bug17589
new file mode 100644
index 0000000000..91103276df
--- /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 ffe4708fca..0a09e833cd 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 */