From 392f2f4b28c44d208b551e1354a02fe392968c0d Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Tue, 17 Apr 2018 06:59:29 -0700 Subject: vm: clear stack memory moved to heap. * vm.c (vm_make_closure): When a display frame is captured by a closure and moves into the heap object, the original should be cleared to all nil values, otherwise it can cause spurious retention of garbage. --- vm.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/vm.c b/vm.c index d06c2ee2..25a7b713 100644 --- a/vm.c +++ b/vm.c @@ -245,9 +245,11 @@ static val vm_make_closure(struct vm *vm, int frsz) case NUM: { val heap_vec = vector(vec, nil); + size_t size = sizeof *cdi->mem * c_num(vec); cdi->vec = heap_vec; cdi->mem = heap_vec->v.vec; - memcpy(cdi->mem, mem, sizeof *cdi->mem * c_num(vec)); + memcpy(cdi->mem, mem, size); + memset(mem, 0, size); mut(closure); *sdi = *cdi; break; -- cgit v1.2.3