chiark
/
gitweb
/
~ianmdlvl
/
adns.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Implement SOA, RP, HINFO (but no mailbox quoting). Implement _finish.
[adns.git]
/
src
/
query.c
diff --git
a/src/query.c
b/src/query.c
index e90d45c85955f497fac368c5e703671aec5a60f2..5605b34aed59ac5eabed9215a9f1d78c2a898dc4 100644
(file)
--- a/
src/query.c
+++ b/
src/query.c
@@
-210,9
+210,19
@@
void *adns__alloc_final(adns_query qu, size_t sz) {
return rp;
}
return rp;
}
+static void cancel_children(adns_query qu) {
+ adns_query cqu, ncqu;
+
+ for (cqu= qu->children.head; cqu; cqu= ncqu) {
+ ncqu= cqu->siblings.next;
+ adns_cancel(cqu);
+ }
+ LIST_INIT(qu->children);
+}
+
void adns__reset_cnameonly(adns_query qu) {
void adns__reset_cnameonly(adns_query qu) {
- /* fixme: cancel children */
assert(!qu->final_allocspace);
assert(!qu->final_allocspace);
+ cancel_children(qu);
qu->answer->nrrs= 0;
qu->answer->rrs= 0;
qu->interim_allocd= qu->answer->cname ? MEM_ROUND(strlen(qu->answer->cname)+1) : 0;
qu->answer->nrrs= 0;
qu->answer->rrs= 0;
qu->interim_allocd= qu->answer->cname ? MEM_ROUND(strlen(qu->answer->cname)+1) : 0;
@@
-220,12
+230,8
@@
void adns__reset_cnameonly(adns_query qu) {
static void free_query_allocs(adns_query qu) {
allocnode *an, *ann;
static void free_query_allocs(adns_query qu) {
allocnode *an, *ann;
- adns_query cqu, ncqu;
- for (cqu= qu->children.head; cqu; cqu= ncqu) {
- ncqu= cqu->siblings.next;
- adns_cancel(cqu);
- }
+ cancel_children(qu);
for (an= qu->allocations.head; an; an= ann) { ann= an->next; free(an); }
adns__vbuf_free(&qu->vb);
}
for (an= qu->allocations.head; an; an= ann) { ann= an->next; free(an); }
adns__vbuf_free(&qu->vb);
}