From 65dc835773f6f4ab47fe4bada7036f1a8b0c8e4a Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Wed, 11 Feb 2009 17:23:11 +0000 Subject: Revert an erroneous part of the non-fix to bug 326, and add comments to explain why it was erroneous. svn:r18494 --- ChangeLog | 3 +++ src/or/eventdns.c | 12 ++++++------ 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 -- cgit v1.2.3-54-g00ecf