diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2009-11-25 16:05:45 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2009-11-25 16:05:45 -0800 |
commit | a2dc66961f22df647e0428b1e12bae8a2922c503 (patch) | |
tree | 2efa38674b0e219fa93549c6d8d0926333654057 /gc.c | |
parent | 3c784ae4f4b25ebcc4019b77c77a7e365fdac261 (diff) | |
download | txr-a2dc66961f22df647e0428b1e12bae8a2922c503.tar.gz txr-a2dc66961f22df647e0428b1e12bae8a2922c503.tar.bz2 txr-a2dc66961f22df647e0428b1e12bae8a2922c503.zip |
Refinements to Valgrind support.
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 23 |
1 files changed, 21 insertions, 2 deletions
@@ -300,9 +300,17 @@ static void mark_mem_region(val *low, val *high) VALGRIND_MAKE_MEM_DEFINED(&maybe_obj, sizeof maybe_obj); #endif if (in_heap(maybe_obj)) { +#ifdef HAVE_VALGRIND + VALGRIND_MAKE_MEM_DEFINED(maybe_obj, sizeof *maybe_obj); +#endif type_t t = maybe_obj->t.type; - if ((t & FREE) == 0) + if ((t & FREE) == 0) { mark_obj(maybe_obj); + } else { +#ifdef HAVE_VALGRIND + VALGRIND_MAKE_MEM_NOACCESS(maybe_obj, sizeof *maybe_obj); +#endif + } } low++; } @@ -335,6 +343,12 @@ static void sweep(void) for (heap = heap_list; heap != 0; heap = heap->next) { obj_t *block, *end; + +#ifdef HAVE_VALGRIND + if (vg_dbg) + VALGRIND_MAKE_MEM_DEFINED(&heap->block, sizeof heap->block); +#endif + for (block = heap->block, end = heap->block + HEAP_SIZE; block < end; block++) @@ -347,8 +361,13 @@ static void sweep(void) continue; } - if (block->t.type & FREE) + if (block->t.type & FREE) { +#ifdef HAVE_VALGRIND + if (vg_dbg) + VALGRIND_MAKE_MEM_NOACCESS(block, sizeof *block); +#endif continue; + } if (0 && gc_dbg) { format(std_error, lit("~a: finalizing: "), progname, nao); |