]> git.ipfire.org Git - thirdparty/postgresql.git/commit
Allow repalloc() to give back space when a large chunk is downsized.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 3 Oct 2019 17:56:26 +0000 (13:56 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 3 Oct 2019 17:56:26 +0000 (13:56 -0400)
commite5e4f12a5f8522d853752f7233f2f3426330927d
tree401bc65d6d4aaac2fb3c7f60fe5bf54c6942c874
parent6db0d7f35917144fcd9dfbdad8c31c37a64ca144
Allow repalloc() to give back space when a large chunk is downsized.

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
src/backend/utils/mmgr/aset.c