]> granicus.if.org Git - libevent/commitdiff
evdns: fix a bug in circular-queue implementation
authorNick Mathewson <nickm@torproject.org>
Wed, 1 Feb 2012 19:56:43 +0000 (14:56 -0500)
committerNick Mathewson <nickm@torproject.org>
Wed, 1 Feb 2012 19:56:43 +0000 (14:56 -0500)
found by Wang Qin

evdns.c

diff --git a/evdns.c b/evdns.c
index 7ad42b74cf95d7d6416d25ed7432e5cee59c0d88..106ac6deab4b34233b5bb5fd6457b15c63cc97f3 100644 (file)
--- a/evdns.c
+++ b/evdns.c
@@ -167,6 +167,7 @@ struct request {
        struct nameserver *ns;  /* the server which we last sent it */
 
        /* these objects are kept in a circular list */
+       /* XXX We could turn this into a CIRCLEQ. */
        struct request *next, *prev;
 
        struct event timeout_event;
@@ -2472,9 +2473,7 @@ _evdns_nameserver_add_impl(struct evdns_base *base, const struct sockaddr *addre
                ns->next = base->server_head->next;
                ns->prev = base->server_head;
                base->server_head->next = ns;
-               if (base->server_head->prev == base->server_head) {
-                       base->server_head->prev = ns;
-               }
+               ns->next->prev = ns;
        }
 
        base->global_good_nameservers++;