mirror of
https://github.com/libevent/libevent.git
synced 2025-01-09 00:56:20 +08:00
Merge remote-tracking branch 'origin/patches-2.0'
This commit is contained in:
commit
9be8624b2f
15
evdns.c
15
evdns.c
@ -4218,6 +4218,8 @@ evdns_getaddrinfo_timeout_cb(evutil_socket_t fd, short what, void *ptr)
|
||||
|
||||
/* Cancel any pending requests, and note which one */
|
||||
if (data->ipv4_request.r) {
|
||||
/* XXXX This does nothing if the request's callback is already
|
||||
* running (pending_cb is set). */
|
||||
evdns_cancel_request(NULL, data->ipv4_request.r);
|
||||
v4_timedout = 1;
|
||||
EVDNS_LOCK(data->evdns_base);
|
||||
@ -4225,6 +4227,8 @@ evdns_getaddrinfo_timeout_cb(evutil_socket_t fd, short what, void *ptr)
|
||||
EVDNS_UNLOCK(data->evdns_base);
|
||||
}
|
||||
if (data->ipv6_request.r) {
|
||||
/* XXXX This does nothing if the request's callback is already
|
||||
* running (pending_cb is set). */
|
||||
evdns_cancel_request(NULL, data->ipv6_request.r);
|
||||
v6_timedout = 1;
|
||||
EVDNS_LOCK(data->evdns_base);
|
||||
@ -4248,6 +4252,10 @@ evdns_getaddrinfo_timeout_cb(evutil_socket_t fd, short what, void *ptr)
|
||||
data->user_cb(e, NULL, data->user_data);
|
||||
}
|
||||
|
||||
data->user_cb = NULL; /* prevent double-call if evdns callbacks are
|
||||
* in-progress. XXXX It would be better if this
|
||||
* weren't necessary. */
|
||||
|
||||
if (!v4_timedout && !v6_timedout) {
|
||||
/* should be impossible? XXXX */
|
||||
free_getaddrinfo_request(data);
|
||||
@ -4318,6 +4326,13 @@ evdns_getaddrinfo_gotresolve(int result, char type, int count,
|
||||
return;
|
||||
}
|
||||
|
||||
if (data->user_cb == NULL) {
|
||||
/* We already answered. XXXX This shouldn't be needed; see
|
||||
* comments in evdns_getaddrinfo_timeout_cb */
|
||||
free_getaddrinfo_request(data);
|
||||
return;
|
||||
}
|
||||
|
||||
if (result == DNS_ERR_NONE) {
|
||||
if (count == 0)
|
||||
err = EVUTIL_EAI_NODATA;
|
||||
|
Loading…
x
Reference in New Issue
Block a user