1 #include <stdlib.h> 2 #include <stddef.h> 3 #include <netdb.h> 4 #include "lookup.h" 5 #include "lock.h" 6 freeaddrinfo(struct addrinfo * p)7void freeaddrinfo(struct addrinfo *p) 8 { 9 size_t cnt; 10 for (cnt=1; p->ai_next; cnt++, p=p->ai_next); 11 struct aibuf *b = (void *)((char *)p - offsetof(struct aibuf, ai)); 12 b -= b->slot; 13 LOCK(b->lock); 14 if (!(b->ref -= cnt)) free(b); 15 else UNLOCK(b->lock); 16 } 17