postgres.git / summary / log / commit / refs

commit    490e9a98ff964df95311e2b5a68a15f63bce0cfd
Author:   Andres Freund <andres@anarazel.de>
Date:     Tue Apr 04 21:26:42 2017 +0000

    Fix two valgrind issues in slab allocator.
    
    During allocation VALGRIND_MAKE_MEM_DEFINED was called with a pointer
    as size. That kind of works, but makes valgrind exceedingly slow for
    workloads involving the slab allocator.
    
    Secondly there was an access to memory marked as unreachable within
    SlabCheck(). Fix that too.
    
    Author: Tomas Vondra
    Discussion: https://postgr.es/m/a6543b6d-6015-99b1-63ef-3ed55a76a730@2ndquadrant.com


src/backend/utils/mmgr/slab.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/utils/mmgr/slab.c b/src/backend/utils/mmgr/slab.c index d6be4fe6603..0fcfcb4c786 100644 --- a/src/backend/utils/mmgr/slab.c +++ b/src/backend/utils/mmgr/slab.c @@ -403,7 +403,7 @@ SlabAlloc(MemoryContext context, Size size) * Remove the chunk from the freelist head. The index of the next free * chunk is stored in the chunk itself. */ - VALGRIND_MAKE_MEM_DEFINED(chunk, SlabChunkGetPointer(chunk)); + VALGRIND_MAKE_MEM_DEFINED(SlabChunkGetPointer(chunk), sizeof(int32)); block->firstFreeChunk = *(int32 *) SlabChunkGetPointer(chunk); Assert(block->firstFreeChunk >= 0); @@ -725,6 +725,7 @@ SlabCheck(MemoryContext context) /* read index of the next free chunk */ chunk = SlabBlockGetChunk(slab, block, idx); + VALGRIND_MAKE_MEM_DEFINED(SlabChunkGetPointer(chunk), sizeof(int32)); idx = *(int32 *) SlabChunkGetPointer(chunk); } [parent: e75a78656bca]