master
 1#include <stdlib.h>
 2#include <stddef.h>
 3#include <netdb.h>
 4#include "lookup.h"
 5#include "lock.h"
 6
 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}