From 94d23360708d5c96b81e3c10fbf29b4c289f7462 Mon Sep 17 00:00:00 2001 From: Greg Hazel Date: Wed, 18 Apr 2012 21:29:21 -0700 Subject: [PATCH 1/2] cancel the probe request when the server is freed, and ignore cancelled probe callbacks --- evdns.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/evdns.c b/evdns.c index 02f5dff5..ba010d46 100644 --- a/evdns.c +++ b/evdns.c @@ -2250,6 +2250,10 @@ nameserver_probe_callback(int result, char type, int count, int ttl, void *addre (void) ttl; (void) addresses; + if (result == DNS_ERR_CANCEL) { + return; + } + EVDNS_LOCK(ns->base); ns->probe_request = NULL; if (result == DNS_ERR_CANCEL) { @@ -2361,6 +2365,10 @@ evdns_base_clear_nameservers_and_suspend(struct evdns_base *base) (void) event_del(&server->event); if (evtimer_initialized(&server->timeout_event)) (void) evtimer_del(&server->timeout_event); + if (server->probe_request) { + evdns_cancel_request(server->base, server->probe_request); + server->probe_request = NULL; + } if (server->socket >= 0) evutil_closesocket(server->socket); mm_free(server); From 46b806084e5426982fbf94cb8f4cf1a95ded6c54 Mon Sep 17 00:00:00 2001 From: Greg Hazel Date: Wed, 18 Apr 2012 21:41:48 -0700 Subject: [PATCH 2/2] remove redundant DNS_ERR_CANCEL check, move comment --- evdns.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/evdns.c b/evdns.c index ba010d46..5db46248 100644 --- a/evdns.c +++ b/evdns.c @@ -2251,16 +2251,15 @@ nameserver_probe_callback(int result, char type, int count, int ttl, void *addre (void) addresses; if (result == DNS_ERR_CANCEL) { + /* We canceled this request because the nameserver came up + * for some other reason. Do not change our opinion about + * the nameserver. */ return; } EVDNS_LOCK(ns->base); ns->probe_request = NULL; - if (result == DNS_ERR_CANCEL) { - /* We canceled this request because the nameserver came up - * for some other reason. Do not change our opinion about - * the nameserver. */ - } else if (result == DNS_ERR_NONE || result == DNS_ERR_NOTEXIST) { + if (result == DNS_ERR_NONE || result == DNS_ERR_NOTEXIST) { /* this is a good reply */ nameserver_up(ns); } else {