]> git.ipfire.org Git - thirdparty/valgrind.git/commit
Improvements in freelist handling for Memcheck. See #250065.
authorJulian Seward <jseward@acm.org>
Sat, 22 Oct 2011 19:48:57 +0000 (19:48 +0000)
committerJulian Seward <jseward@acm.org>
Sat, 22 Oct 2011 19:48:57 +0000 (19:48 +0000)
commitae9c958f7079700d7c14e326fa88faf60d1fd0ab
treef435e5c21ceae7bb18fefa85b922f3e09b0e8ef7
parentf552193183bf6f297ba811a0d348b86369ade098
Improvements in freelist handling for Memcheck.  See #250065.

(Philippe Waroquiers, philippe.waroquiers@skynet.be)

This patch provides three improvements in the way the free list is
handled in memcheck.

First improvement: a new command line option --freelist-big-blocks
(default 1000000) specifies the size of "free list big blocks".
Such big blocks will be put on the free list, but will be re-cycled first
(i.e. in preference to block having a smaller size).
This fixes the bug https://bugs.kde.org/show_bug.cgi?id=250065.
Technically, the freed list is divided in two lists : small
and big blocks. Blocks are first released from the big block list.

Second improvement: the blocks of the freed list are re-cycled before
a new block is malloc-ed, not after a block is freed.
This gives better error messages for dangling pointer errors
when doing many frees without doing malloc between the frees.
(this does not uses more memory).

Third improvement: a block bigger than the free list volume will be
put in the free list (till a malloc is done, so as the needed memory
is not bigger than before) but will be put at the beginning of the
free list, rather than at the end. So, allocating then freeing such a
block does not cause any blocks in the free list to be released.

Results of the improvements above, with the new regression test
memcheck/test/big_blocks_freed_list: with the patch, 7 errors
are detected, 6 are giving the (correct) allocation stack.
Without the patch, only 6 errors are detected, 5 errors without
allocation stack, 1 with a (wrong) allocation stack.

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12202
memcheck/docs/mc-manual.xml
memcheck/mc_errors.c
memcheck/mc_include.h
memcheck/mc_main.c
memcheck/mc_malloc_wrappers.c
memcheck/tests/Makefile.am
memcheck/tests/big_blocks_freed_list.c [new file with mode: 0644]
memcheck/tests/big_blocks_freed_list.stderr.exp [new file with mode: 0644]
memcheck/tests/big_blocks_freed_list.vgtest [new file with mode: 0644]
memcheck/tests/memalign2.vgtest