From 58b96d9330262d7c80f233e7aa1f4d53a5fdd431 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Tue, 20 Mar 2018 21:32:19 -0700 Subject: gc: tail recurse on env rather than code. * gc.c (mark_obj): When marking functions, tail recurse on the environment. That's the pointer more likely to be a gateway to serious depth, rather than the vm description or interpreted function's source. --- gc.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/gc.c b/gc.c index 12710dc7..18c65915 100644 --- a/gc.c +++ b/gc.c @@ -371,14 +371,15 @@ tail_call: mark_obj(obj->pk.hidhash); mark_obj_tail(obj->pk.symhash); case FUN: - mark_obj(obj->f.env); switch (obj->f.functype) { case FINTERP: - mark_obj_tail(obj->f.f.interp_fun); + mark_obj(obj->f.f.interp_fun); + break; case FVM: - mark_obj_tail(obj->f.f.vm_desc); + mark_obj(obj->f.f.vm_desc); + break; } - return; + mark_obj_tail(obj->f.env); case VEC: { val alloc_size = obj->v.vec[vec_alloc]; -- cgit v1.2.3