Skip to content

Instantly share code, notes, and snippets.

@yasuoka
Created March 24, 2014 11:30
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save yasuoka/5ff8f8fed8af3a1f910d to your computer and use it in GitHub Desktop.
diff --git a/evdns.c b/evdns.c
index c8c2936..7e94b3d 100644
--- a/evdns.c
+++ b/evdns.c
@@ -3973,6 +3973,10 @@ evdns_nameserver_free(struct nameserver *server)
event_debug_unassign(&server->event);
if (server->state == 0)
(void) event_del(&server->timeout_event);
+ if (server->probe_request) {
+ evdns_cancel_request(server->base, server->probe_request);
+ server->probe_request = NULL;
+ }
event_debug_unassign(&server->timeout_event);
mm_free(server);
}
@@ -3988,13 +3992,6 @@ evdns_base_free_and_unlock(struct evdns_base *base, int fail_requests)
/* TODO(nickm) we might need to refcount here. */
- for (i = 0; i < base->n_req_heads; ++i) {
- while (base->req_heads[i]) {
- if (fail_requests)
- reply_schedule_callback(base->req_heads[i], 0, DNS_ERR_SHUTDOWN, NULL);
- request_finished(base->req_heads[i], &REQ_HEAD(base, base->req_heads[i]->trans_id), 1);
- }
- }
for (server = base->server_head; server; server = server_next) {
server_next = server->next;
evdns_nameserver_free(server);
@@ -4003,6 +4000,14 @@ evdns_base_free_and_unlock(struct evdns_base *base, int fail_requests)
}
base->server_head = NULL;
base->global_good_nameservers = 0;
+
+ for (i = 0; i < base->n_req_heads; ++i) {
+ while (base->req_heads[i]) {
+ if (fail_requests)
+ reply_schedule_callback(base->req_heads[i], 0, DNS_ERR_SHUTDOWN, NULL);
+ request_finished(base->req_heads[i], &REQ_HEAD(base, base->req_heads[i]->trans_id), 1);
+ }
+ }
while (base->req_waiting_head) {
if (fail_requests)
reply_schedule_callback(base->req_waiting_head, 0, DNS_ERR_SHUTDOWN, NULL);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment