• Andres Freund's avatar
    Fix two memory leaks around force-storing tuples in slots. · 88e6ad30
    Andres Freund authored
    As reported by Tom, when ExecStoreMinimalTuple() had to perform a
    conversion to store the minimal tuple in the slot, it forgot to
    respect the shouldFree flag, and leaked the tuple into the current
    memory context if true.  Fix that by freeing the tuple in that case.
    
    Looking at the relevant code made me (Andres) realize that not having
    the shouldFree parameter to ExecForceStoreHeapTuple() was a bad
    idea. Some callers had to locally implement the necessary logic, and
    in one case it was missing, creating a potential per-group leak in
    non-hashed aggregation.
    
    The choice to not free the tuple in ExecComputeStoredGenerated() is
    not pretty, but not introduced by this commit - I'll start a separate
    discussion about it.
    
    Reported-By: Tom Lane
    Discussion: https://postgr.es/m/366.1555382816@sss.pgh.pa.us
    88e6ad30
nodeIndexonlyscan.c 23.1 KB