Andres Freund <and...@anarazel.de> writes: > On 2022-09-08 14:10:36 -0400, Tom Lane wrote: >> No, I don't think we can get away with that. See int8inc() for a >> counterexample.
> What I was suggesting a bit below the bit quoted above, was that we'd copy > whenever there's no finalfunc or if the finalfunc doesn't take an internal > parameter. Hmm, OK, I was confusing this with the optimization for transition functions; but that one is looking for pointer equality rather than checking MemoryContextContains. So maybe this'd work. > This business with interpreting random memory as a palloc'd chunk seems like a > fundamentally wrong approach worth incurring some pain to fix. I hate to give up MemoryContextContains altogether. The assertions that David nuked in b76fb6c2a had some value I think, and I was hoping to address your concerns in [1] by adding Assert(MemoryContextContains()) to guc_free. But I'm not sure how much that'll help to diagnose you- malloced-instead-of-pallocing if the result is not an assertion failure but a segfault in a not-obviously-related place. The failure at guc_free is already going to be some distance from the scene of the crime. 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. regards, tom lane [1] https://www.postgresql.org/message-id/20220905233233.jhcu5jqsrtosmgh5%40awork3.anarazel.de