From: Mark Wooding Date: Wed, 14 May 2014 00:13:21 +0000 (+0100) Subject: src/query.c: Handle the magic zero-byte-allocation convention. X-Git-Tag: wip.base.getaddrinfo~17 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=adns.git;a=commitdiff_plain;h=37883323b39ceb0f98d0960c33c57f1d9cdf4ce9 src/query.c: Handle the magic zero-byte-allocation convention. --- diff --git a/src/query.c b/src/query.c index 46d6969..8944b2f 100644 --- a/src/query.c +++ b/src/query.c @@ -390,11 +390,11 @@ void *adns__alloc_preserved(adns_query qu, size_t sz) { return rv; } -static allocnode *alloc_info(void *p, size_t *sz_r) +static allocnode *alloc_info(adns_query qu, void *p, size_t *sz_r) { allocnode *an; - if (!p) { *sz_r = 0; return 0; } + if (!p || p == qu) { *sz_r = 0; return 0; } an = (allocnode *)((byte *)p - MEM_ROUND(sizeof(allocnode))); *sz_r = MEM_ROUND(an->sz); return an; @@ -402,7 +402,7 @@ static allocnode *alloc_info(void *p, size_t *sz_r) void adns__free_interim(adns_query qu, void *p) { size_t sz; - allocnode *an = alloc_info(p, &sz); + allocnode *an = alloc_info(qu, p, &sz); if (!an) return; assert(!qu->final_allocspace); @@ -417,7 +417,7 @@ void *adns__alloc_mine(adns_query qu, size_t sz) { void adns__transfer_interim(adns_query from, adns_query to, void *block) { size_t sz; - allocnode *an = alloc_info(block, &sz); + allocnode *an = alloc_info(from, block, &sz); if (!an) return;