Fix assertion failure due to over-eager code deduplication.
In the previous commit I'd made MemoryContextContains() use GetMemoryChunkContext(), but that causes trouble when the passed pointer isn't allocated in any memory context - that's probably something we shouldn't do, but the previous commit isn't a place for a "policy" change.
This commit is contained in:
parent
f4e2d50cd7
commit
123ccbe583
@ -566,7 +566,24 @@ MemoryContextCheck(MemoryContext context)
|
||||
bool
|
||||
MemoryContextContains(MemoryContext context, void *pointer)
|
||||
{
|
||||
MemoryContext ptr_context = GetMemoryChunkContext(pointer);
|
||||
MemoryContext ptr_context;
|
||||
|
||||
/*
|
||||
* NB: Can't use GetMemoryChunkContext() here - that performs assertions
|
||||
* that aren't acceptable here since we might be passed memory not
|
||||
* allocated by any memory context.
|
||||
*
|
||||
* Try to detect bogus pointers handed to us, poorly though we can.
|
||||
* Presumably, a pointer that isn't MAXALIGNED isn't pointing at an
|
||||
* allocated chunk.
|
||||
*/
|
||||
if (pointer == NULL || pointer != (void *) MAXALIGN(pointer))
|
||||
return false;
|
||||
|
||||
/*
|
||||
* OK, it's probably safe to look at the context.
|
||||
*/
|
||||
ptr_context = *(MemoryContext *) (((char *) pointer) - sizeof(void *));
|
||||
|
||||
return ptr_context == context;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user