summaryrefslogtreecommitdiffstats
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
commit0fd3e5a4e427cfa15440649a69e78c5817cecb81 (patch)
treeb96b283be10e3f6ddb9cbaf182acce44f3995733
parenta0df8cd707d2552a80222f0de0c82b1d114c8f6a (diff)
downloadtxr-0fd3e5a4e427cfa15440649a69e78c5817cecb81.tar.gz
txr-0fd3e5a4e427cfa15440649a69e78c5817cecb81.tar.bz2
txr-0fd3e5a4e427cfa15440649a69e78c5817cecb81.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.
-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));