pgsql: Improve valgrind logic in aset.c,and fix multiple issues in gen - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Improve valgrind logic in aset.c,and fix multiple issues in gen
Date
Msg-id E1eIOKe-0001UU-FW@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Improve valgrind logic in aset.c, and fix multiple issues in generation.c.

Revise aset.c so that all the "private" fields of chunk headers are
marked NOACCESS when outside the module, improving on the previous
coding which protected only requested_size.  Fix a couple of corner
case bugs, such as failing to re-protect the header during a failure
exit from AllocSetRealloc, and wrong padding-size calculation for an
oversize allocation request.

Apply the same design to generation.c, and also fix several bugs therein
that I found by dint of hacking the code to use generation.c as the
standard allocator and then running the core regression tests with it.
Notably, we have to track the actual size of each block, else the
wipe_mem call in GenerationReset clears the wrong amount of memory for
an oversize-chunk block; and GenerationCheck needs a way of identifying
freed chunks that isn't fooled by palloc(0).  I chose to fix the latter
by resetting the context pointer to NULL in a freed chunk, roughly like
what happens in a freed aset.c chunk.

Discussion: https://postgr.es/m/E1eHa4J-0006hI-Q8@gemulon.postgresql.org

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/0f2458ff5f970cade04313f1a10fe01d02f888b7

Modified Files
--------------
src/backend/utils/mmgr/aset.c       | 121 +++++++++++++++++--------
src/backend/utils/mmgr/generation.c | 173 +++++++++++++++++++++++-------------
2 files changed, 192 insertions(+), 102 deletions(-)


pgsql-committers by date:

Previous
From: Tom Lane
Date:
Subject: pgsql: Mostly-cosmetic improvements in memory chunk header alignmentco
Next
From: Tom Lane
Date:
Subject: Re: pgsql: Generational memory allocator