X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcheck.c;h=f5e1a9eaa2c3df9d7fd075aeb8348b23f9bef21f;hb=814cee186999a6e9a76ab970f891347c1e42b132;hp=08fe163b62ecd8608cfa9957b88f6282cbd813b0;hpb=17cd4f48f8aee24c988b662b95884d50b6395584;p=adns.git diff --git a/src/check.c b/src/check.c index 08fe163..f5e1a9e 100644 --- a/src/check.c +++ b/src/check.c @@ -4,7 +4,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 @@ -136,14 +136,19 @@ static void checkc_queue_tcpw(adns_state ads) { } static void checkc_queue_childw(adns_state ads) { - adns_query parent, child; + adns_query parent, child, search; DLIST_CHECK(ads->childw, parent, , { assert(parent->state == query_childw); assert(parent->children.head); DLIST_CHECK(parent->children, child, siblings., { assert(child->parent == parent); - assert(child->state != query_done); + if (child->state == query_done) { + for (search= ads->intdone.head; search; search= search->next) + if (search==child) goto child_done_ok; + assert(!"done child not on intdone"); + child_done_ok:; + } }); checkc_query(ads,parent); checkc_query_alloc(ads,parent); @@ -182,7 +187,10 @@ void adns__consistency(adns_state ads, adns_query qu, consistency_checks cc) { switch (cc) { case cc_user: break; - case cc_entex: + case cc_enter: + if (!(ads->iflags & adns_if_checkc_entex)) return; + break; + case cc_exit: if (!(ads->iflags & adns_if_checkc_entex)) return; assert(!ads->intdone.head); break;