Dear,

This code snippet comes from libevent-2.0.13. The list operation is
the same. I think it does not have any bugs.

yrs,



/* insert this nameserver into the list of them */
        if (!base->server_head) {
                ns->next = ns->prev = ns;
                base->server_head = ns;
        } else {
                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;
                }
        }


On 12/22/11, Nick Mathewson <ni...@freehaven.net> wrote:
> On Wed, Dec 21, 2011 at 7:53 AM, wang qin <scpl0...@gmail.com> wrote:
>>
>> Dear,
>>
>> I do not understand of the list operation of the
>> _evdns_nameserver_add_impl.
>>
>> How to understand this snippet?
>>
>> Best is figures and notes.
>>
>>
>>
>> Thank you very much!
>>
>>
>>        /* insert this nameserver into the list of them */
>>        if (!server_head) {
>>                ns->next = ns->prev = ns;
>>                server_head = ns;
>>        } else {
>>                ns->next = server_head->next;
>>                ns->prev = server_head;
>>                server_head->next = ns;
>>                if (server_head->prev == server_head) {
>>                        server_head->prev = ns;
>>                }
>>        }
>
> It looks like it's supposed to be a circular doubly linked list to me.
>  If the list is empty, then the new nameserver is inserted as the sole
> node, and its prev and next pointers are set to itself (to make the
> list circular).  But if the list is notempty, we insert the new
> nameserver after the current head (server_head).
>
> It looks like there's a possible bug there; I don't see anything that
> points ns->next->prev at ns.   If that's so, the best solution here is
> probably to replace the whole thing evdns_base.server_head thing with
> a CIRCLEQ or such.
>
> (FWIW, this looks like really old code; Libevent 2.0 is the version
> folks should be using. Libevent 1.4 is not under active development.)
>
> yrs,
> --
> Nick
> ***********************************************************************
> To unsubscribe, send an e-mail to majord...@freehaven.net with
> unsubscribe libevent-users    in the body.
>
***********************************************************************
To unsubscribe, send an e-mail to majord...@freehaven.net with
unsubscribe libevent-users    in the body.

Reply via email to