have freed or know the address of everything we need to free before invoking
the callback: otherwise we mess with freed memory, which is bad.
void *c;
bres_client *rc;
adns_query q;
void *c;
bres_client *rc;
adns_query q;
else switch (rc->q) {
case adns_r_addr:
assert(a->type == adns_r_addr);
else switch (rc->q) {
case adns_r_addr:
assert(a->type == adns_r_addr);
- report(rc, a, a->rrs.addr, a->nrrs, &a->owner, 1);
+ report(rc, a, a->rrs.addr, a->nrrs, &a->owner, 1);
free(a);
break;
case adns_r_ptr:
free(a);
break;
case adns_r_ptr:
- report(rc, a, &a->rrs.addr[i], 1, rc->a->rrs.str, rc->a->nrrs);
- free(rc->a);
+ aa = rc->a;
+ report(rc, a, &a->rrs.addr[i], 1, aa->rrs.str, aa->nrrs);
+ free(aa);
if (rc->q == adns_r_addr) xfree(rc->u.name);
if (rc->a) free(rc->a);
if (rc->q == adns_r_addr) xfree(rc->u.name);
if (rc->a) free(rc->a);