X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib/blobdiff_plain/1dc931965d15b69def7e1fdd44b4397eca01e4c9..0683223aa93d14e4b1d0620010392c518a3a6392:/bres-adns.c diff --git a/bres-adns.c b/bres-adns.c index e0a034a..68b919c 100644 --- a/bres-adns.c +++ b/bres-adns.c @@ -254,7 +254,7 @@ static void afterhook(sel_state *s, sel_args *sa, void *p) void *c; bres_client *rc; adns_query q; - adns_answer *a; + adns_answer *a, *aa; int e; int i; @@ -268,8 +268,8 @@ static void afterhook(sel_state *s, sel_args *sa, void *p) 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); xfree(rc->u.name); + report(rc, a, a->rrs.addr, a->nrrs, &a->owner, 1); free(a); break; case adns_r_ptr: @@ -289,8 +289,9 @@ static void afterhook(sel_state *s, sel_args *sa, void *p) } goto fail; match: - 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); free(a); } break; @@ -300,9 +301,9 @@ static void afterhook(sel_state *s, sel_args *sa, void *p) continue; fail: - rc->func(0, rc->p); if (rc->q == adns_r_addr) xfree(rc->u.name); if (rc->a) free(rc->a); + rc->func(0, rc->p); free(a); } }