});
}
+static void checkc_query_done(adns_state ads, adns_query qu) {
+ assert(qu->state == query_done);
+ assert(!qu->children.head && !qu->children.tail);
+ checkc_query(ads,qu);
+}
+
static void checkc_queue_output(adns_state ads) {
adns_query qu;
DLIST_CHECK(ads->output, qu, , {
- assert(qu->state == query_done);
- assert(!qu->children.head && !qu->children.tail);
assert(!qu->parent);
assert(!qu->allocations.head && !qu->allocations.tail);
- checkc_query(ads,qu);
+ checkc_query_done(ads,qu);
+ });
+}
+
+static void checkc_queue_intdone(adns_state ads) {
+ adns_query qu;
+
+ DLIST_CHECK(ads->intdone, qu, , {
+ assert(qu->parent);
+ assert(qu->ctx.callback);
+ checkc_query_done(ads,qu);
});
}
break;
case cc_entex:
if (!(ads->iflags & adns_if_checkc_entex)) return;
+ assert(!ads->intdone.head);
break;
case cc_freq:
if ((ads->iflags & adns_if_checkc_freq) != adns_if_checkc_freq) return;
checkc_queue_tcpw(ads);
checkc_queue_childw(ads);
checkc_queue_output(ads);
+ checkc_queue_intdone(ads);
if (qu) {
switch (qu->state) {
DLIST_ASSERTON(qu, search, ads->childw, );
break;
case query_done:
- DLIST_ASSERTON(qu, search, ads->output, );
+ if (qu->parent)
+ DLIST_ASSERTON(qu, search, ads->intdone, );
+ else
+ DLIST_ASSERTON(qu, search, ads->output, );
break;
default:
assert(!"specific query state");