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