diff options
author | Azat Khuzhin <a3at.mail@gmail.com> | 2014-03-21 17:04:58 +0400 |
---|---|---|
committer | Azat Khuzhin <a3at.mail@gmail.com> | 2014-04-09 19:02:39 +0400 |
commit | 610410b5864ba952fdadbb6575478b9dcc4c79ac (patch) | |
tree | a083c866fcda5d2dd0181a3459346c6af15ee04b | |
parent | a60632a1ec6649dfa0be175d064b1ca6192cc5bf (diff) | |
download | libevent-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.c | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -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, |