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
|
bool
|
||||||
MemoryContextContains(MemoryContext context, void *pointer)
|
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;
|
return ptr_context == context;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user