mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-13 06:33:44 +01:00
Try to untangle the logic in server_port_flush
It's a bit confusing to have a loop where another function, confusingly named "*_free", is responsible for advancing the loop variable (or rather, for altering a structure so that the next time the loop variable's initializer is evaluated it evaluates to something different.) Not only has this confused people: it's also confused coverity scan. Let's fix that.
This commit is contained in:
parent
ab87b61a9d
commit
2590d733f4
@ -1293,8 +1293,8 @@ server_port_read(struct evdns_server_port *s) {
|
|||||||
static void
|
static void
|
||||||
server_port_flush(struct evdns_server_port *port)
|
server_port_flush(struct evdns_server_port *port)
|
||||||
{
|
{
|
||||||
while (port->pending_replies) {
|
struct server_request *req = port->pending_replies;
|
||||||
struct server_request *req = port->pending_replies;
|
while (req) {
|
||||||
ssize_t r = sendto(port->socket, req->response, req->response_len, 0,
|
ssize_t r = sendto(port->socket, req->response, req->response_len, 0,
|
||||||
(struct sockaddr*) &req->addr, (socklen_t)req->addrlen);
|
(struct sockaddr*) &req->addr, (socklen_t)req->addrlen);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
@ -1306,6 +1306,9 @@ server_port_flush(struct evdns_server_port *port)
|
|||||||
if (server_request_free(req)) {
|
if (server_request_free(req)) {
|
||||||
/* we released the last reference to req->port. */
|
/* we released the last reference to req->port. */
|
||||||
return;
|
return;
|
||||||
|
} else {
|
||||||
|
assert(port->pending_replies != req);
|
||||||
|
req = port->pending_replies;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user