• Tom Lane's avatar
    Allow repalloc() to give back space when a large chunk is downsized. · c477f3e4
    Tom Lane authored
    Up to now, if you resized a large (>8K) palloc chunk down to a smaller
    size, aset.c made no attempt to return any space to the malloc pool.
    That's unpleasant if a really large allocation is resized to a
    significantly smaller size.  I think no such cases existed when this
    code was designed, and I'm not sure whether they're common even yet,
    but an upcoming fix to encoding conversion will certainly create such
    cases.  Therefore, fix AllocSetRealloc so that it gives realloc()
    a chance to do something with the block.  This doesn't noticeably
    increase complexity, we mostly just have to change the order in which
    the cases are considered.
    
    Back-patch to all supported branches.
    
    Discussion: https://postgr.es/m/20190816181418.GA898@alvherre.pgsql
    Discussion: https://postgr.es/m/3614.1569359690@sss.pgh.pa.us
    c477f3e4
aset.c 46.6 KB