freeaddrinfo.c 355 B

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