summaryrefslogtreecommitdiffstats
path: root/vm.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2018-03-18 20:12:54 -0700
committerKaz Kylheku <kaz@kylheku.com>2018-03-18 20:12:54 -0700
commitcb107336fa2bfd2cf7f548bf82e0ff1d1484de21 (patch)
treeb96b283be10e3f6ddb9cbaf182acce44f3995733 /vm.c
parent25f220a4221204ccc75592097ba6e9e7cb418c4b (diff)
downloadtxr-cb107336fa2bfd2cf7f548bf82e0ff1d1484de21.tar.gz
txr-cb107336fa2bfd2cf7f548bf82e0ff1d1484de21.tar.bz2
txr-cb107336fa2bfd2cf7f548bf82e0ff1d1484de21.zip
vm: free display memory when closure reclaimed.
* vm.c (vm_closure_destroy): New static function. (vm_closure_ops): Use vm_closure_destroy rather than generic cobj_destroy_free_op.
Diffstat (limited to 'vm.c')
-rw-r--r--vm.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/vm.c b/vm.c
index 450165f0..a49b8731 100644
--- a/vm.c
+++ b/vm.c
@@ -214,6 +214,13 @@ static val vm_make_closure(struct vm *vm, int frsz)
return closure;
}
+static void vm_closure_destroy(val obj)
+{
+ struct vm_closure *vc = coerce(struct vm_closure *, obj->co.handle);
+ free(vc->dspl);
+ free(vc);
+}
+
static void vm_closure_mark(val obj)
{
struct vm_closure *vc = coerce(struct vm_closure *, obj->co.handle);
@@ -850,7 +857,7 @@ static_def(struct cobj_ops vm_desc_ops =
static_def(struct cobj_ops vm_closure_ops =
cobj_ops_init(eq,
cobj_print_op,
- cobj_destroy_free_op,
+ vm_closure_destroy,
vm_closure_mark,
cobj_eq_hash_op));