From b6ef76fff184201b4f3ff46198fbf254823f856b Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 12 Oct 2014 21:10:23 +0100 Subject: [PATCH] Reentrancy: adns__internal_submit does list handling Move the formulaic queue management from the call sites to adns__internal_submit. The requirement to do this wasn't mentioned in adns__internal_submit's comment, and now that it's not there it probably isn't worth remarking on. No ultimate functional change. Signed-off-by: Ian Jackson Conflicts: src/types.c --- src/internal.h | 1 + src/query.c | 3 +++ src/types.c | 13 ++++--------- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/internal.h b/src/internal.h index 3ea8a93..658fded 100644 --- a/src/internal.h +++ b/src/internal.h @@ -610,6 +610,7 @@ void adns__query_send(adns_query qu, struct timeval now); /* From query.c: */ adns_status adns__internal_submit(adns_state ads, adns_query *query_r, + adns_query parent, const typeinfo *typei, adns_rrtype type, vbuf *qumsg_vb, int id, adns_queryflags flags, struct timeval now, diff --git a/src/query.c b/src/query.c index a5882f3..6a1ec75 100644 --- a/src/query.c +++ b/src/query.c @@ -148,6 +148,7 @@ static adns_status check_domain_name(adns_state ads, adns_queryflags flags, } adns_status adns__internal_submit(adns_state ads, adns_query *query_r, + adns_query parent, const typeinfo *typei, adns_rrtype type, vbuf *qumsg_vb, int id, adns_queryflags flags, struct timeval now, @@ -161,6 +162,8 @@ adns_status adns__internal_submit(adns_state ads, adns_query *query_r, if (!qu) { err = adns_s_nomemory; goto x_err; } *query_r= qu; + qu->parent= parent; + LIST_LINK_TAIL_PART(parent->children,qu,siblings.); memcpy(&qu->ctx,ctx,sizeof(qu->ctx)); query_submit(ads,qu, typei,qumsg_vb,id,flags,now); diff --git a/src/types.c b/src/types.c index 048e4dd..d53fe3e 100644 --- a/src/types.c +++ b/src/types.c @@ -560,13 +560,11 @@ static void addr_subqueries(adns_query qu, struct timeval now, err= adns__mkquery_frdgram(qu->ads, &qu->vb, &id, qd_dgram,qd_dglen, DNS_HDRSIZE, addr_all_rrtypes[i], qf); if (err) goto x_error; - err= adns__internal_submit(qu->ads, &cqu, &tinfo_addrsub, + err= adns__internal_submit(qu->ads, &cqu, qu, &tinfo_addrsub, addr_all_rrtypes[i] | qtf, &qu->vb, id, qf, now, &ctx); if (err) goto x_error; cqu->answer->rrsz= qu->answer->rrsz; - cqu->parent= qu; - LIST_LINK_TAIL_PART(qu->children, cqu,siblings.); } qu->state= query_childw; LIST_LINK_TAIL(qu->ads->childw, qu); @@ -600,12 +598,10 @@ static adns_status addr_submit(adns_query parent, adns_query *query_r, ctx->tinfo.addr.want= want; ctx->tinfo.addr.have= 0; - err= adns__internal_submit(ads, &qu, adns__findtype(adns_r_addr), + err= adns__internal_submit(ads, &qu, parent, adns__findtype(adns_r_addr), type, qumsg_vb, id, flags, now, ctx); if (err) return err; - qu->parent= parent; - LIST_LINK_TAIL_PART(parent->children, qu, siblings.); *query_r= qu; return adns_s_ok; } @@ -1210,13 +1206,12 @@ static adns_status pa_ptr(const parseinfo *pai, int dmstart, ctx.callback= icb_ptr; memset(&ctx.pinfo,0,sizeof(ctx.pinfo)); memset(&ctx.tinfo,0,sizeof(ctx.tinfo)); - st= adns__internal_submit(pai->ads, &nqu, adns__findtype(rrtype), + st= adns__internal_submit(pai->ads, &nqu, pai->qu, + adns__findtype(rrtype), rrtype, &pai->qu->vb, id, adns_qf_quoteok_query, pai->now, &ctx); if (st) return st; - nqu->parent= pai->qu; - LIST_LINK_TAIL_PART(pai->qu->children,nqu,siblings.); return adns_s_ok; } -- 2.11.0