mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-18 08:49:57 -04:00
Fix a double-delete on the request timeout event. Port from Tor.
svn:r1138
This commit is contained in:
parent
28255a2635
commit
0f3c0983c0
3
evdns.c
3
evdns.c
@ -1972,13 +1972,13 @@ evdns_request_timeout_callback(evutil_socket_t fd, short events, void *arg) {
|
|||||||
nameserver_failed(req->ns, "request timed out.");
|
nameserver_failed(req->ns, "request timed out.");
|
||||||
}
|
}
|
||||||
|
|
||||||
(void) evtimer_del(&req->timeout_event);
|
|
||||||
if (req->tx_count >= req->base->global_max_retransmits) {
|
if (req->tx_count >= req->base->global_max_retransmits) {
|
||||||
/* this request has failed */
|
/* this request has failed */
|
||||||
reply_callback(req, 0, DNS_ERR_TIMEOUT, NULL);
|
reply_callback(req, 0, DNS_ERR_TIMEOUT, NULL);
|
||||||
request_finished(req, &REQ_HEAD(req->base, req->trans_id));
|
request_finished(req, &REQ_HEAD(req->base, req->trans_id));
|
||||||
} else {
|
} else {
|
||||||
/* retransmit it */
|
/* retransmit it */
|
||||||
|
(void) evtimer_del(&req->timeout_event);
|
||||||
evdns_request_transmit(req);
|
evdns_request_transmit(req);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2471,6 +2471,7 @@ request_submit(struct evdns_request *const req) {
|
|||||||
void
|
void
|
||||||
evdns_cancel_request(struct evdns_base *base, struct evdns_request *req)
|
evdns_cancel_request(struct evdns_base *base, struct evdns_request *req)
|
||||||
{
|
{
|
||||||
|
/* XXX Does anything ever free the request */
|
||||||
if (req->ns) {
|
if (req->ns) {
|
||||||
/* remove from inflight queue */
|
/* remove from inflight queue */
|
||||||
evdns_request_remove(req, &REQ_HEAD(base, req->trans_id));
|
evdns_request_remove(req, &REQ_HEAD(base, req->trans_id));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user