On Wed, Jun 13, 2012 at 2:28 PM, Andres Freund <and...@2ndquadrant.com> wrote: > +/* > + * removes a node from a list > + * Attention: O(n) > + */ > +static inline void ilist_s_remove(ilist_s_head *head, > + ilist_s_node *node) > +{ > + ilist_s_node *last = &head->head; > + ilist_s_node *cur; > +#ifndef NDEBUG > + bool found = false; > +#endif > + while ((cur = last->next)) > + { > + if (cur == node) > + { > + last->next = cur->next; > +#ifndef NDEBUG > + found = true; > +#endif > + break; > + } > + last = cur; > + } > + assert(found); > +}
This looks weird. In cyclic list removal is: node->prev->next = node->next; node->next->prev = node->prev; And thats it. -- marko -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers