#include <stdlib.h> | |
#include <stddef.h> | |
#include <netdb.h> | |
#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); | |
} |