*/
/*
* This file is part of adns, which is
- * Copyright (C) 1997-2000,2003,2006,2014-2016 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
r= init_finish(ads);
if (r) return r;
- adns__consistency(ads,0,cc_entex);
+ adns__consistency(ads,0,cc_exit);
*ads_r= ads;
return 0;
}
}
r= init_finish(ads); if (r) return r;
- adns__consistency(ads,0,cc_entex);
+ adns__consistency(ads,0,cc_exit);
*ads_r= ads;
return 0;
}
return init_files(newstate_r, flags, logfn, logfndata);
}
+static void cancel_all(adns_query qu) {
+ if (!qu->parent) adns__cancel(qu);
+ else cancel_all(qu->parent);
+}
+
void adns_finish(adns_state ads) {
int i;
- adns__consistency(ads,0,cc_entex);
+ adns__consistency(ads,0,cc_enter);
for (;;) {
- if (ads->udpw.head) adns__cancel(ads->udpw.head);
- else if (ads->tcpw.head) adns__cancel(ads->tcpw.head);
- else if (ads->childw.head) adns__cancel(ads->childw.head);
- else if (ads->output.head) adns__cancel(ads->output.head);
- else if (ads->intdone.head) adns__cancel(ads->output.head);
+ if (ads->udpw.head) cancel_all(ads->udpw.head);
+ else if (ads->tcpw.head) cancel_all(ads->tcpw.head);
+ else if (ads->childw.head) cancel_all(ads->childw.head);
+ else if (ads->output.head) cancel_all(ads->output.head);
+ else if (ads->intdone.head) cancel_all(ads->output.head);
else break;
}
for (i=0; i<ads->nudpsockets; i++) close(ads->udpsockets[i].fd);
}
void adns_forallqueries_begin(adns_state ads) {
- adns__consistency(ads,0,cc_entex);
+ adns__consistency(ads,0,cc_enter);
ads->forallnext=
ads->udpw.head ? ads->udpw.head :
ads->tcpw.head ? ads->tcpw.head :
adns_query adns_forallqueries_next(adns_state ads, void **context_r) {
adns_query qu, nqu;
- adns__consistency(ads,0,cc_entex);
+ adns__consistency(ads,0,cc_enter);
nqu= ads->forallnext;
for (;;) {
qu= nqu;