Thread: bug in SlabAlloc / VALGRIND_MAKE_MEM_DEFINED

bug in SlabAlloc / VALGRIND_MAKE_MEM_DEFINED

From
Tomas Vondra
Date:
Hi,

Andres nagged to me about valgrind runs taking much longer since 
9fab40ad introduced the SlabContext into reorderbuffer.c. And by 
"longer" I mean hours instead of minutes.

After a bit of investigation I stumbled on this line in slab.c:

   VALGRIND_MAKE_MEM_DEFINED(chunk, SlabChunkGetPointer(chunk));

which is wrong, because the second parameter should be size and not 
another pointer. This essentially marks a lot of memory as defined, 
which results in the extreme test runtime.

Instead, the line should be:

   VALGRIND_MAKE_MEM_DEFINED(SlabChunkGetPointer(chunk), sizeof(int32));

Patch attached.

-- 
Tomas Vondra                  http://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Attachment

Re: bug in SlabAlloc / VALGRIND_MAKE_MEM_DEFINED

From
Tomas Vondra
Date:
On 04/04/2017 10:42 PM, Tomas Vondra wrote:
> Hi,
>
> Andres nagged to me about valgrind runs taking much longer since
> 9fab40ad introduced the SlabContext into reorderbuffer.c. And by
> "longer" I mean hours instead of minutes.
>
> After a bit of investigation I stumbled on this line in slab.c:
>
>   VALGRIND_MAKE_MEM_DEFINED(chunk, SlabChunkGetPointer(chunk));
>
> which is wrong, because the second parameter should be size and not
> another pointer. This essentially marks a lot of memory as defined,
> which results in the extreme test runtime.
>
> Instead, the line should be:
>
>   VALGRIND_MAKE_MEM_DEFINED(SlabChunkGetPointer(chunk), sizeof(int32));
>
> Patch attached.
>

Turns out SlabCheck() was missing VALGRIND_MAKE_MEM_DEFINED, resulting 
in a valgrind failure with --enable-assert. Updated patch version 
attached, passing all tests in test_decoding.

regards

-- 
Tomas Vondra                  http://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Attachment

Re: bug in SlabAlloc / VALGRIND_MAKE_MEM_DEFINED

From
Andres Freund
Date:
On 2017-04-04 23:23:30 +0200, Tomas Vondra wrote:
> On 04/04/2017 10:42 PM, Tomas Vondra wrote:
> > Hi,
> > 
> > Andres nagged to me about valgrind runs taking much longer since
> > 9fab40ad introduced the SlabContext into reorderbuffer.c. And by
> > "longer" I mean hours instead of minutes.
> > 
> > After a bit of investigation I stumbled on this line in slab.c:
> > 
> >   VALGRIND_MAKE_MEM_DEFINED(chunk, SlabChunkGetPointer(chunk));
> > 
> > which is wrong, because the second parameter should be size and not
> > another pointer. This essentially marks a lot of memory as defined,
> > which results in the extreme test runtime.
> > 
> > Instead, the line should be:
> > 
> >   VALGRIND_MAKE_MEM_DEFINED(SlabChunkGetPointer(chunk), sizeof(int32));
> > 
> > Patch attached.
> > 
> 
> Turns out SlabCheck() was missing VALGRIND_MAKE_MEM_DEFINED, resulting in a
> valgrind failure with --enable-assert. Updated patch version attached,
> passing all tests in test_decoding.

Pushed, and re-enabled TestDecoding on skink.