X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=adns.git;a=blobdiff_plain;f=src%2Fquery.c;h=1de9dfd181932cfdd2082c3333904782e8da21bc;hp=c18ba8e991c3481f33057bf44145a6025a2d3605;hb=1427b043b575b03a7e129e5cddb9db39ebdce722;hpb=11a38eb17bbedce089254ff65f8c01f9d78004d3 diff --git a/src/query.c b/src/query.c index c18ba8e..1de9dfd 100644 --- a/src/query.c +++ b/src/query.c @@ -415,6 +415,17 @@ static allocnode *alloc_info(adns_query qu, void *p, size_t *sz_r) { return an; } +void adns__free_interim(adns_query qu, void *p) { + size_t sz; + allocnode *an= alloc_info(qu, p, &sz); + + if (!an) return; + assert(!qu->final_allocspace); + LIST_UNLINK(qu->allocations, an); + free(an); + qu->interim_allocd -= sz; +} + void *adns__alloc_mine(adns_query qu, size_t sz) { return alloc_common(qu,MEM_ROUND(sz)); } @@ -453,7 +464,7 @@ void *adns__alloc_final(adns_query qu, size_t sz) { return rp; } -static void cancel_children(adns_query qu) { +void adns__cancel_children(adns_query qu) { adns_query cqu, ncqu; for (cqu= qu->children.head; cqu; cqu= ncqu) { @@ -464,7 +475,7 @@ static void cancel_children(adns_query qu) { void adns__reset_preserved(adns_query qu) { assert(!qu->final_allocspace); - cancel_children(qu); + adns__cancel_children(qu); qu->answer->nrrs= 0; qu->answer->rrs.untyped= 0; qu->interim_allocd= qu->preserved_allocd; @@ -473,7 +484,7 @@ void adns__reset_preserved(adns_query qu) { static void free_query_allocs(adns_query qu) { allocnode *an, *ann; - cancel_children(qu); + adns__cancel_children(qu); for (an= qu->allocations.head; an; an= ann) { ann= an->next; free(an); } LIST_INIT(qu->allocations); adns__vbuf_free(&qu->vb); @@ -561,7 +572,7 @@ void adns__query_done(adns_query qu) { adns_answer *ans; adns_query parent; - cancel_children(qu); + adns__cancel_children(qu); qu->id= -1; ans= qu->answer;