17 lines
355 B
C
17 lines
355 B
C
#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);
|
|
}
|