summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2009-02-11 17:23:11 +0000
committerNick Mathewson <nickm@torproject.org>2009-02-11 17:23:11 +0000
commit65dc835773f6f4ab47fe4bada7036f1a8b0c8e4a (patch)
tree828bc757325a29d81cce87a7399898b69c850295
parent6e4afe6f13b827b539b73e7e3126c6e36b877dd5 (diff)
downloadtor-65dc835773f6f4ab47fe4bada7036f1a8b0c8e4a.tar.gz
tor-65dc835773f6f4ab47fe4bada7036f1a8b0c8e4a.zip
Revert an erroneous part of the non-fix to bug 326, and add comments to explain why it was erroneous.
svn:r18494
-rw-r--r--ChangeLog3
-rw-r--r--src/or/eventdns.c12
2 files changed, 9 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index cb093410dc..0acf8bc68a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -16,6 +16,9 @@ Changes in version 0.2.1.13-????? - 2009-0?-??
logs. Bugfix on 0.2.1.8-alpha.
- Clients no longer cache certificates for authorities they do not
recognize. Bugfix on 0.2.0.9-alpha.
+ - When we can't transmit a DNS request due to a network error, retry
+ it after a while, and eventually transmit a failing response to the
+ RESOLVED cell. Bugfix on 0.1.2.5-alpha.
o Minor features:
- On Linux, use the prctl call to re-enable core dumps when the user
diff --git a/src/or/eventdns.c b/src/or/eventdns.c
index 5638d2d4a6..12a291d1b8 100644
--- a/src/or/eventdns.c
+++ b/src/or/eventdns.c
@@ -2046,9 +2046,10 @@ evdns_request_transmit(struct evdns_request *req) {
nameserver_write_waiting(req->ns, 1);
return 1;
case 2:
- /* failed in some other way */
+ /* failed to transmit the request entirely. */
retcode = 1;
- break;
+ /* fall through: we'll set a timeout, which will time out,
+ * and make us retransmit the request anyway. */
default:
/* transmitted; we need to check for timeout. */
log(EVDNS_LOG_DEBUG,
@@ -2060,11 +2061,10 @@ evdns_request_transmit(struct evdns_request *req) {
(unsigned long) req);
/* ???? Do more? */
}
+ req->tx_count++;
+ req->transmit_me = 0;
+ return retcode;
}
-
- req->tx_count++;
- req->transmit_me = 0;
- return retcode;
}
static void