diff --git a/src/backend/utils/mmgr/aset.c b/src/backend/utils/mmgr/aset.c index ec3e264a73..901a954508 100644 --- a/src/backend/utils/mmgr/aset.c +++ b/src/backend/utils/mmgr/aset.c @@ -150,11 +150,13 @@ typedef AllocSetContext *AllocSet; */ typedef struct AllocBlockData { - AllocSet aset; /* aset that owns this block */ AllocBlock prev; /* prev block in aset's blocks list, if any */ AllocBlock next; /* next block in aset's blocks list, if any */ char *freeptr; /* start of free space in this block */ char *endptr; /* end of space in this block */ +#ifdef MEMORY_CONTEXT_CHECKING + AllocSet aset; /* aset that owns this block */ +#endif } AllocBlockData; /* @@ -485,11 +487,13 @@ AllocSetContextCreateInternal(MemoryContext parent, /* Fill in the initial block's block header */ block = (AllocBlock) (((char *) set) + MAXALIGN(sizeof(AllocSetContext))); - block->aset = set; block->freeptr = ((char *) block) + ALLOC_BLOCKHDRSZ; block->endptr = ((char *) set) + firstBlockSize; block->prev = NULL; block->next = NULL; +#ifdef MEMORY_CONTEXT_CHECKING + block->aset = set; +#endif /* Mark unallocated space NOACCESS; leave the block header alone. */ VALGRIND_MAKE_MEM_NOACCESS(block->freeptr, block->endptr - block->freeptr); @@ -743,8 +747,10 @@ AllocSetAlloc(MemoryContext context, Size size) context->mem_allocated += blksize; - block->aset = set; block->freeptr = block->endptr = ((char *) block) + blksize; +#ifdef MEMORY_CONTEXT_CHECKING + block->aset = set; +#endif chunk = (AllocChunk) (((char *) block) + ALLOC_BLOCKHDRSZ); chunk->aset = set; @@ -936,9 +942,11 @@ AllocSetAlloc(MemoryContext context, Size size) context->mem_allocated += blksize; - block->aset = set; block->freeptr = ((char *) block) + ALLOC_BLOCKHDRSZ; block->endptr = ((char *) block) + blksize; +#ifdef MEMORY_CONTEXT_CHECKING + block->aset = set; +#endif /* Mark unallocated space NOACCESS. */ VALGRIND_MAKE_MEM_NOACCESS(block->freeptr, @@ -1014,6 +1022,7 @@ AllocSetFree(MemoryContext context, void *pointer) */ AllocBlock block = (AllocBlock) (((char *) chunk) - ALLOC_BLOCKHDRSZ); +#ifdef MEMORY_CONTEXT_CHECKING /* * Try to verify that we have a sane block pointer: it should * reference the correct aset, and freeptr and endptr should point @@ -1024,6 +1033,7 @@ AllocSetFree(MemoryContext context, void *pointer) block->freeptr != ((char *) block) + (chunk->size + ALLOC_BLOCKHDRSZ + ALLOC_CHUNKHDRSZ)) elog(ERROR, "could not find block containing chunk %p", chunk); +#endif /* OK, remove block from aset's list and free it */ if (block->prev) @@ -1103,6 +1113,7 @@ AllocSetRealloc(MemoryContext context, void *pointer, Size size) Size blksize; Size oldblksize; +#ifdef MEMORY_CONTEXT_CHECKING /* * Try to verify that we have a sane block pointer: it should * reference the correct aset, and freeptr and endptr should point @@ -1113,6 +1124,7 @@ AllocSetRealloc(MemoryContext context, void *pointer, Size size) block->freeptr != ((char *) block) + (oldsize + ALLOC_BLOCKHDRSZ + ALLOC_CHUNKHDRSZ)) elog(ERROR, "could not find block containing chunk %p", chunk); +#endif /* * Even if the new request is less than set->allocChunkLimit, we stick