aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 cb093410d..0acf8bc68 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 5638d2d4a..12a291d1b 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