chiark / gitweb /
src/query.c: Handle the magic zero-byte-allocation convention.
authorMark Wooding <mdw@distorted.org.uk>
Wed, 14 May 2014 00:13:21 +0000 (01:13 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Wed, 14 May 2014 00:13:21 +0000 (01:13 +0100)
src/query.c

index 46d69699e49750b806bc4983b7ef4523a9963fce..8944b2f3c67d527d30b1ccba959a500e3d68a6f8 100644 (file)
@@ -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;