diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2009-11-25 14:17:39 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2009-11-25 14:17:39 -0800 |
commit | 52ae14f4f4f788947c3b5ec3b7b2892b50499690 (patch) | |
tree | a6c60cf34656caf2204c36b64a4573e1579bdabb /lib.c | |
parent | f95e76d93a4dbf27e15ca01f4e8b0ab7d3132a81 (diff) | |
download | txr-52ae14f4f4f788947c3b5ec3b7b2892b50499690.tar.gz txr-52ae14f4f4f788947c3b5ec3b7b2892b50499690.tar.bz2 txr-52ae14f4f4f788947c3b5ec3b7b2892b50499690.zip |
More valgrind integration. Vector objects keep displaced pointers
to vector data; they point to element 0 which is actually the third
element of the vector. If an object is only referenced by interior
pointers, Valgrind reports it as possibly leaked. This change
conditionally adds a pointer to the true start of the vector,
if Valgrind support is enabled.
Diffstat (limited to 'lib.c')
-rw-r--r-- | lib.c | 6 |
1 files changed, 6 insertions, 0 deletions
@@ -1378,6 +1378,9 @@ val vector(val alloc) val *v = (val *) chk_malloc(alloc_plus * sizeof *v); vec->v.type = VEC; vec->v.vec = v + 2; +#ifdef HAVE_VALGRIND + vec->v.vec_true_start = v; +#endif v[0] = alloc; v[1] = zero; return vec; @@ -1406,6 +1409,9 @@ val vec_set_fill(val vec, val fill) (new_alloc + 2)*sizeof *newvec); vec->v.vec = newvec + 2; vec->v.vec[vec_alloc] = num(new_alloc); +#ifdef HAVE_VALGRIND + vec->v.vec_true_start = newvec; +#endif } if (fill_delta > 0) { |