From: Nick Mathewson Date: Tue, 18 May 2010 21:27:06 +0000 (-0400) Subject: If no evdns request can be launched, return NULL, not a handle X-Git-Tag: release-2.0.6-rc~59^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b14f151b42ca9fddd52bee7c323e1217b28ae8af;p=libevent If no evdns request can be launched, return NULL, not a handle Some of our evdns code was willing to return an evdns_request with handle->current_req set to NULL. Really, those cases should just return NULL. --- diff --git a/evdns.c b/evdns.c index 7b2b72cc..309b466e 100644 --- a/evdns.c +++ b/evdns.c @@ -2692,8 +2692,12 @@ evdns_base_resolve_ipv4(struct evdns_base *base, const char *name, int flags, if (req) request_submit(req); } else { - req = search_request_new(base, handle, TYPE_A, name, flags, - callback, ptr); + search_request_new(base, handle, TYPE_A, name, flags, + callback, ptr); + } + if (handle->current_req == NULL) { + mm_free(handle); + handle = NULL; } EVDNS_UNLOCK(base); return handle; @@ -2726,8 +2730,12 @@ evdns_base_resolve_ipv6(struct evdns_base *base, if (req) request_submit(req); } else { - req = search_request_new(base, handle, TYPE_AAAA, name, flags, - callback, ptr); + search_request_new(base, handle, TYPE_AAAA, name, flags, + callback, ptr); + } + if (handle->current_req == NULL) { + mm_free(handle); + handle = NULL; } EVDNS_UNLOCK(base); return handle; @@ -2760,6 +2768,10 @@ evdns_base_resolve_reverse(struct evdns_base *base, const struct in_addr *in, in req = request_new(base, handle, TYPE_PTR, buf, flags, callback, ptr); if (req) request_submit(req); + if (handle->current_req == NULL) { + mm_free(handle); + handle = NULL; + } EVDNS_UNLOCK(base); return (handle); } @@ -2796,6 +2808,10 @@ evdns_base_resolve_reverse_ipv6(struct evdns_base *base, const struct in6_addr * req = request_new(base, handle, TYPE_PTR, buf, flags, callback, ptr); if (req) request_submit(req); + if (handle->current_req == NULL) { + mm_free(handle); + handle = NULL; + } EVDNS_UNLOCK(base); return (handle); }