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 /ChangeLog | |
parent | 3c784ae4f4b25ebcc4019b77c77a7e365fdac261 (diff) | |
download | txr-a2dc66961f22df647e0428b1e12bae8a2922c503.tar.gz txr-a2dc66961f22df647e0428b1e12bae8a2922c503.tar.bz2 txr-a2dc66961f22df647e0428b1e12bae8a2922c503.zip |
Refinements to Valgrind support.
Diffstat (limited to 'ChangeLog')
-rw-r--r-- | ChangeLog | 19 |
1 files changed, 19 insertions, 0 deletions
@@ -1,5 +1,24 @@ 2009-11-25 Kaz Kylheku <kkylheku@gmail.com> + Refinements to Valgrind support. + + * gc.c (mark_mem_region): If a pointer from the stack is valid + for the heap, it may point to a free object, which is marked + in accessible. We must grant the garbage collector access + to the object. If the object is free, close off access. + This is not 100% correct, because if the object is accessible + but undefined, then we end up flipping it to defined. + (sweep): Before sweeping each heap, mark the entire block as defined. + This is necessary because sweep accesses blocks, which may be free, + and thus inaccessible. Then, during the sweep, any block + which is already free must be marked inaccessible again. + This means that the remaining blocks that are reachable become defined. + Here that is okay, because gc has marked all those blocks. If any + of them had uninitialized members, that would have been caught + by valgrind during the marking phase, if not sooner. + +2009-11-25 Kaz Kylheku <kkylheku@gmail.com> + More Valgrind support. New option --vg-debug which turns on Valgrind protection of free blocks. This works independently of --gc-debug. |