On Fri, 9 Sept 2022 at 10:53, Tom Lane <t...@sss.pgh.pa.us> wrote: > I hate to give up MemoryContextContains altogether. The assertions > that David nuked in b76fb6c2a had some value I think,
Those can be put back if we decide to keep MemoryContextContains. Those newly added Asserts just temporarily had to go due to b76fb6c2a making MemoryContextContains temporarily always return false. > The implementation I suggested upthread would reliably distinguish > malloc from palloc, and while it is potentially a tad expensive > I don't think it's too much so for Assert checks. I don't have an > objection to trying to get to a place where we only use it in > Assert, though. I really think the Assert only form of MemoryContextContains() is the best move, and if it's doing Assert only, then we can do the loop-over-the-blocks idea as you described and I drafted in [1]. If the need comes up that we're certain we always have a pointer to some allocated chunk, but need to know if it's in some memory context, then the proper form of expressing that, I think, should be: if (GetMemoryChunkContext(pointer) == somecontext) If we're worried about getting that wrong, we can beef up the MemoryChunk struct with a magic_number field in MEMORY_CONTEXT_CHECKING builds to ensure we catch any code which passes invalid pointers. David [1] https://www.postgresql.org/message-id/CAApHDvoKjOmPQeokicwDuO-_Edh=tKp23-=jskycykfw5qu...@mail.gmail.com