From: Nick Mathewson Date: Fri, 21 Mar 2014 18:08:17 +0000 (-0400) Subject: Fix a crash in evdns related to shutting down evdns X-Git-Tag: release-2.0.22-stable~15 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9f39c8875683d12f64cfe2c9d32d9c15982a1f33;p=libevent Fix a crash in evdns related to shutting down evdns Patch from YASUOKA Masahiko; fix for libevent github issue #113. --- diff --git a/evdns.c b/evdns.c index 2285eb7d..ff60b098 100644 --- a/evdns.c +++ b/evdns.c @@ -3968,13 +3968,6 @@ evdns_base_free_and_unlock(struct evdns_base *base, int fail_requests) 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); - request_finished(base->req_waiting_head, &base->req_waiting_head, 1); - } - base->global_requests_inflight = base->global_requests_waiting = 0; - for (server = base->server_head; server; server = server_next) { server_next = server->next; evdns_nameserver_free(server); @@ -3983,6 +3976,13 @@ evdns_base_free_and_unlock(struct evdns_base *base, int fail_requests) } base->server_head = NULL; base->global_good_nameservers = 0; + while (base->req_waiting_head) { + if (fail_requests) + reply_schedule_callback(base->req_waiting_head, 0, DNS_ERR_SHUTDOWN, NULL); + request_finished(base->req_waiting_head, &base->req_waiting_head, 1); + } + base->global_requests_inflight = base->global_requests_waiting = 0; + if (base->global_search_state) { for (dom = base->global_search_state->head; dom; dom = dom_next) {