mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-05-05 18:08:03 +02:00
[freelist] valgrindify freed blocks
Mark freed blocks as unaccessible upon free() and then as undefined on alloc().
This commit is contained in:
parent
4e11d56f8e
commit
e89828c533
1 changed files with 22 additions and 4 deletions
|
|
@ -24,10 +24,17 @@
|
|||
|
||||
#include "cairo-freelist-private.h"
|
||||
|
||||
#if HAVE_VALGRIND
|
||||
#include <memcheck.h>
|
||||
#define VG(x) x
|
||||
#else
|
||||
#define VG(x)
|
||||
#endif
|
||||
|
||||
void
|
||||
_cairo_freelist_init (cairo_freelist_t *freelist, unsigned nodesize)
|
||||
{
|
||||
memset (freelist, 0, sizeof(cairo_freelist_t));
|
||||
memset (freelist, 0, sizeof (cairo_freelist_t));
|
||||
freelist->nodesize = nodesize;
|
||||
}
|
||||
|
||||
|
|
@ -36,7 +43,11 @@ _cairo_freelist_fini (cairo_freelist_t *freelist)
|
|||
{
|
||||
cairo_freelist_node_t *node = freelist->first_free_node;
|
||||
while (node) {
|
||||
cairo_freelist_node_t *next = node->next;
|
||||
cairo_freelist_node_t *next;
|
||||
|
||||
VG (VALGRIND_MAKE_MEM_DEFINED (node, sizeof (node->next)));
|
||||
next = node->next;
|
||||
|
||||
free (node);
|
||||
node = next;
|
||||
}
|
||||
|
|
@ -46,10 +57,16 @@ void *
|
|||
_cairo_freelist_alloc (cairo_freelist_t *freelist)
|
||||
{
|
||||
if (freelist->first_free_node) {
|
||||
cairo_freelist_node_t *node = freelist->first_free_node;
|
||||
cairo_freelist_node_t *node;
|
||||
|
||||
node = freelist->first_free_node;
|
||||
VG (VALGRIND_MAKE_MEM_DEFINED (node, sizeof (node->next)));
|
||||
freelist->first_free_node = node->next;
|
||||
return (void*)node;
|
||||
VG (VALGRIND_MAKE_MEM_UNDEFINED (node, freelist->nodesize));
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
return malloc (freelist->nodesize);
|
||||
}
|
||||
|
||||
|
|
@ -69,5 +86,6 @@ _cairo_freelist_free (cairo_freelist_t *freelist, void *voidnode)
|
|||
if (node) {
|
||||
node->next = freelist->first_free_node;
|
||||
freelist->first_free_node = node;
|
||||
VG (VALGRIND_MAKE_MEM_NOACCESS (node, freelist->nodesize));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue