X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcheck.c;h=f5e1a9eaa2c3df9d7fd075aeb8348b23f9bef21f;hb=HEAD;hp=c26dbdcd95bc854e04eb71e8ae6864e73e94b146;hpb=82ae109eba3901127fcd5267872b0afd64af4a7c;p=adns.git diff --git a/src/check.c b/src/check.c index c26dbdc..ead1249 100644 --- a/src/check.c +++ b/src/check.c @@ -3,15 +3,12 @@ * - consistency checks */ /* - * This file is part of adns, which is - * Copyright (C) 1997-2000,2003,2006 Ian Jackson - * Copyright (C) 1999-2000,2003,2006 Tony Finch - * Copyright (C) 1991 Massachusetts Institute of Technology - * (See the file INSTALL for full details.) + * This file is part of adns, which is Copyright Ian Jackson + * and contributors (see the file INSTALL for full details). * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) + * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, @@ -20,8 +17,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * along with this program; if not, write to the Free Software Foundation. */ #include "internal.h" @@ -78,7 +74,7 @@ static void checkc_global(adns_state ads) { const struct sortlist *sl; int i; - assert(ads->udpsocket >= 0); + assert(ads->udpsockets >= 0); for (i=0; insortlist; i++) { sl= &ads->sortlist[i]; @@ -136,14 +132,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 +183,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;