X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/adns/blobdiff_plain/d8c062faeda8147546f1e709171f7f0767331954..c912639e8f7077600caab8f25cad26d7779ba3d8:/src/query.c?ds=sidebyside diff --git a/src/query.c b/src/query.c index 3fab80c..a676376 100644 --- a/src/query.c +++ b/src/query.c @@ -27,7 +27,6 @@ #include #include #include -#include #include @@ -202,8 +201,10 @@ int adns_submit(adns_state ads, adns_query qu; const char *p; + adns__consistency(ads,0,cc_entex); + typei= adns__findtype(type); - if (!typei) return adns_s_unknownrrtype; + if (!typei) return ENOSYS; r= gettimeofday(&now,0); if (r) goto x_errno; qu= query_alloc(ads,typei,flags,now); if (!qu) goto x_errno; @@ -237,15 +238,18 @@ int adns_submit(adns_state ads, } query_simple(ads,qu, owner,ol, typei,flags, now); } + adns__consistency(ads,qu,cc_entex); return 0; x_adnsfail: adns__query_fail(qu,stat); + adns__consistency(ads,qu,cc_entex); return 0; x_errno: r= errno; assert(r); + adns__consistency(ads,0,cc_entex); return r; } @@ -358,19 +362,24 @@ static void free_query_allocs(adns_query qu) { cancel_children(qu); for (an= qu->allocations.head; an; an= ann) { ann= an->next; free(an); } + LIST_INIT(qu->allocations); adns__vbuf_free(&qu->vb); } void adns_cancel(adns_query qu) { + adns_state ads; + + ads= qu->ads; + adns__consistency(ads,qu,cc_entex); switch (qu->state) { case query_tosend: case query_tcpwait: case query_tcpsent: - LIST_UNLINK(qu->ads->timew,qu); + LIST_UNLINK(ads->timew,qu); break; case query_child: - LIST_UNLINK(qu->ads->childw,qu); + LIST_UNLINK(ads->childw,qu); break; case query_done: - LIST_UNLINK(qu->ads->output,qu); + LIST_UNLINK(ads->output,qu); break; default: abort(); @@ -378,6 +387,7 @@ void adns_cancel(adns_query qu) { free_query_allocs(qu); free(qu->answer); free(qu); + adns__consistency(ads,0,cc_entex); } void adns__update_expires(adns_query qu, unsigned long ttl, struct timeval now) { @@ -465,6 +475,7 @@ void adns__query_done(adns_query qu) { makefinal_query(qu); LIST_LINK_TAIL(qu->ads->output,qu); } + qu->state= query_done; } void adns__query_fail(adns_query qu, adns_status stat) {