Selaa lähdekoodia

[Fix] Another fix for rdns write errors

Issue: #971
tags/1.4.0
Vsevolod Stakhov 7 vuotta sitten
vanhempi
commit
93afc2d45f
1 muutettua tiedostoa jossa 17 lisäystä ja 3 poistoa
  1. 17
    3
      contrib/librdns/resolver.c

+ 17
- 3
contrib/librdns/resolver.c Näytä tiedosto

@@ -347,6 +347,8 @@ rdns_process_timer (void *arg)
req->state = RDNS_REQUEST_REPLIED;
req->func (rep, req->arg);
REF_RELEASE (req);

return;
}

/* Select random IO channel */
@@ -356,13 +358,20 @@ rdns_process_timer (void *arg)
renew = true;
}

/*
* Note: when `renew` is true, then send_request deals with the
* timers and events itself
*/
r = rdns_send_request (req, req->io->sock, renew);
if (r == 0) {
/* Retransmit one more time */
req->async->del_timer (req->async->data,
if (!renew) {
req->async->del_timer (req->async->data,
req->async_event);
req->async_event = req->async->add_write (req->async->data,
req->io->sock, req);
req->async_event = req->async->add_write (req->async->data,
req->io->sock, req);
}

req->state = RDNS_REQUEST_WAIT_SEND;
}
else if (r == -1) {
@@ -374,6 +383,11 @@ rdns_process_timer (void *arg)
UPSTREAM_FAIL (req->io->srv, time (NULL));
}

if (!renew) {
req->async->del_timer (req->async->data,
req->async_event);
}

/* We have not scheduled timeout actually due to send error */
rep = rdns_make_reply (req, RDNS_RC_NETERR);
req->state = RDNS_REQUEST_REPLIED;

Loading…
Peruuta
Tallenna