• Tom Lane's avatar
    Improve valgrind logic in aset.c, and fix multiple issues in generation.c. · 0f2458ff
    Tom Lane authored
    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
    0f2458ff
generation.c 24.4 KB