bug in SlabAlloc / VALGRIND_MAKE_MEM_DEFINED

From: Tomas Vondra <tomas(dot)vondra(at)2ndquadrant(dot)com>
To: PostgreSQL Developers <pgsql-hackers(at)postgresql(dot)org>
Subject: bug in SlabAlloc / VALGRIND_MAKE_MEM_DEFINED
Date: 2017-04-04 20:42:39
Message-ID: a6543b6d-6015-99b1-63ef-3ed55a76a730@2ndquadrant.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

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 Content-Type Size
slab-valgrind-fix.patch binary/octet-stream 603 bytes

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Peter Geoghegan 2017-04-04 20:49:11 Re: tuplesort_gettuple_common() and *should_free argument
Previous Message Andres Freund 2017-04-04 20:32:02 Re: tuplesort_gettuple_common() and *should_free argument