#include #include #include #include "lookup.h" #include "lock.h" void freeaddrinfo(struct addrinfo *p) { size_t cnt; for (cnt=1; p->ai_next; cnt++, p=p->ai_next); struct aibuf *b = (void *)((char *)p - offsetof(struct aibuf, ai)); b -= b->slot; LOCK(b->lock); if (!(b->ref -= cnt)) free(b); else UNLOCK(b->lock); }