summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAzat Khuzhin <a3at.mail@gmail.com>2014-03-21 17:04:58 +0400
committerAzat Khuzhin <a3at.mail@gmail.com>2014-04-09 19:02:39 +0400
commit610410b5864ba952fdadbb6575478b9dcc4c79ac (patch)
treea083c866fcda5d2dd0181a3459346c6af15ee04b
parenta60632a1ec6649dfa0be175d064b1ca6192cc5bf (diff)
downloadlibevent-610410b5864ba952fdadbb6575478b9dcc4c79ac.tar.gz
evdns: disable probing with EVDNS_BASE_DISABLE_WHEN_INACTIVE
When user install EVDNS_BASE_DISABLE_WHEN_INACTIVE flag for evdns base, we must remove the timer that is used for probing, if current dns server failed, otherwise it won't break the loop.
-rw-r--r--evdns.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/evdns.c b/evdns.c
index 66a3bff3..b196229b 100644
--- a/evdns.c
+++ b/evdns.c
@@ -662,6 +662,7 @@ request_finished(struct request *const req, struct request **head, int free_hand
req->ns->requests_inflight == 0 &&
req->base->disable_when_inactive) {
event_del(&req->ns->event);
+ evtimer_del(&req->ns->timeout_event);
}
if (!req->request_appended) {
@@ -2198,9 +2199,10 @@ evdns_request_transmit_to(struct request *req, struct nameserver *server) {
ASSERT_VALID_REQUEST(req);
if (server->requests_inflight == 1 &&
- req->base->disable_when_inactive &&
- event_add(&server->event, NULL) < 0) {
- return 1;
+ req->base->disable_when_inactive) {
+ if (event_add(&server->event, NULL) < 0 ||
+ evtimer_add(&req->ns->timeout_event, &req->base->global_nameserver_probe_initial_timeout) < 0)
+ return 1;
}
r = sendto(server->socket, (void*)req->request, req->request_len, 0,