From: Nick Mathewson Date: Mon, 23 Feb 2009 20:04:51 +0000 (+0000) Subject: Fix one case of bug 929. X-Git-Tag: tor-0.2.1.13-alpha~14 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=27c3b43817d1c150049437a8906785a4fee0814f;p=thirdparty%2Ftor.git Fix one case of bug 929. svn:r18683 --- diff --git a/ChangeLog b/ChangeLog index fa2037c4cd..efd4b3535e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -32,6 +32,10 @@ Changes in version 0.2.1.13-????? - 2009-02-?? circuit. Patch from lark. - When we erroneously receive two EXTEND cells for the same circuit ID on the same connection, drop the second. Patch from lark. + - Fix a crash that occurs on exit nodes when a nameserver request + timed out. Bugfix on 0.1.2.1-alpha; our CLEAR debugging code + had been suppressing the bug since 0.1.2.10-alpha. Partial fix + for bug 929. 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 4c50a109f5..63851483f3 100644 --- a/src/or/eventdns.c +++ b/src/or/eventdns.c @@ -2016,14 +2016,17 @@ evdns_request_timeout_callback(int fd, short events, void *arg) { nameserver_failed(req->ns, "request timed out."); } - del_timeout_event(req); - CLEAR(&req->timeout_event); if (req->tx_count >= global_max_retransmits) { /* this request has failed */ reply_callback(req, 0, DNS_ERR_TIMEOUT, NULL); request_finished(req, &req_head); } else { /* retransmit it */ + /* Stop waiting for the timeout. No need to do this in + * request_finished; that one already deletes the timeout event. + * XXXX021 port this change to libevent. */ + del_timeout_event(req); + CLEAR(&req->timeout_event); evdns_request_transmit(req); } }