X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fquery.c;h=4eba88871f651c921fbf727206868c9b2f009e3e;hb=514c20aa99cd2f29c7e5da1e263ab7e81e3a9ff3;hp=1f51b69dc26c8060d21740e1e469ae3c58e22d64;hpb=17cd4f48f8aee24c988b662b95884d50b6395584;p=adns.git diff --git a/src/query.c b/src/query.c index 1f51b69..4eba888 100644 --- a/src/query.c +++ b/src/query.c @@ -6,7 +6,7 @@ */ /* * This file is part of adns, which is - * Copyright (C) 1997-2000,2003,2006,2014 Ian Jackson + * Copyright (C) 1997-2000,2003,2006,2014-2016,2020 Ian Jackson * Copyright (C) 2014 Mark Wooding * Copyright (C) 1999-2000,2003,2006 Tony Finch * Copyright (C) 1991 Massachusetts Institute of Technology @@ -72,7 +72,7 @@ static adns_query query_alloc(adns_state ads, qu->retries= 0; qu->udpnextserver= 0; qu->udpsent= 0; - timerclear(&qu->timeout); + adns__timeout_clear(qu); qu->expires= now.tv_sec + MAXTTLBELIEVE; memset(&qu->ctx,0,sizeof(qu->ctx)); @@ -273,7 +273,13 @@ int adns_submit(adns_state ads, adns_query qu; const char *p; - adns__consistency(ads,0,cc_entex); + adns__consistency(ads,0,cc_enter); + + if (flags & ~(adns_queryflags)0x4009ffff) + /* 0x40080000 are reserved for `harmless' future expansion + * 0x00000020 used to be adns_qf_quoteok_cname, now the default; + * see also addrfam.c:textaddr_check_qf */ + return ENOSYS; typei= adns__findtype(type); if (!typei) return ENOSYS; @@ -425,10 +431,10 @@ void adns__free_interim(adns_query qu, void *p) { if (!an) return; assert(!qu->final_allocspace); + qu->interim_allocd -= sz; + assert(qu->interim_allocd >= 0); LIST_UNLINK(qu->allocations, an); free(an); - qu->interim_allocd -= sz; - assert(!qu->interim_allocd >= 0); } void *adns__alloc_mine(adns_query qu, size_t sz) { @@ -498,7 +504,7 @@ static void free_query_allocs(adns_query qu) { qu->query_dgram= 0; } -void adns__returning(adns_state ads, adns_query qu_for_caller) { +void adns__intdone_process(adns_state ads) { while (ads->intdone.head) { adns_query iq= ads->intdone.head; adns_query parent= iq->parent; @@ -510,7 +516,11 @@ void adns__returning(adns_state ads, adns_query qu_for_caller) { free(iq->answer); free(iq); } - adns__consistency(ads,qu_for_caller,cc_entex); +} + +void adns__returning(adns_state ads, adns_query qu_for_caller) { + adns__intdone_process(ads); + adns__consistency(ads,qu_for_caller,cc_exit); } void adns__cancel(adns_query qu) { @@ -548,7 +558,7 @@ void adns_cancel(adns_query qu) { assert(!qu->parent); ads= qu->ads; - adns__consistency(ads,qu,cc_entex); + adns__consistency(ads,qu,cc_enter); adns__cancel(qu); adns__returning(ads,0); }