From 37883323b39ceb0f98d0960c33c57f1d9cdf4ce9 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Wed, 14 May 2014 01:13:21 +0100 Subject: [PATCH] src/query.c: Handle the magic zero-byte-allocation convention. --- src/query.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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; -- 2.30.2