diff --git a/bin/ikarus b/bin/ikarus index 5801d52..dc749c7 100755 Binary files a/bin/ikarus and b/bin/ikarus differ diff --git a/bin/ikarus-collect.c b/bin/ikarus-collect.c index f26a9d2..c3613c4 100644 --- a/bin/ikarus-collect.c +++ b/bin/ikarus-collect.c @@ -488,15 +488,16 @@ guardians_loop(gc_t* gc){ ik_guardian_table* t = pcb->guardians[i]; while(t){ int j; - int c = t->count; - for(j=0; jcount; + for(j=0; jp[j].tc; ikp obj = t->p[j].obj; if(is_live(obj, gc)){ pending_hold[i] = - move_guardian(t->p[j].tc, obj, pending_hold[i]); + move_guardian(tc, obj, pending_hold[i]); } else { pending_final = - move_guardian(t->p[j].tc, obj, pending_final); + move_guardian(tc, obj, pending_final); } } ik_guardian_table* next = t->next; @@ -868,10 +869,12 @@ add_object_proc(gc_t* gc, ikp x) if(is_fixnum(x)){ return x; } +#ifndef NDEBUG if(x == forward_ptr){ fprintf(stderr, "GOTCHA\n"); exit(-1); } +#endif int tag = tagof(x); if(tag == immediate_tag){ return x; diff --git a/bin/ikarus-runtime.c b/bin/ikarus-runtime.c index e02d01c..a8f11ca 100644 --- a/bin/ikarus-runtime.c +++ b/bin/ikarus-runtime.c @@ -833,7 +833,7 @@ ikrt_register_guardian(ikp tc, ikp obj, ikpcb* pcb){ exit(-1); } ik_guardian_table* p = - (ik_guardian_table*)ik_alloc(pcb, sizeof(ik_guardian_table)); + (ik_guardian_table*)ik_mmap(sizeof(ik_guardian_table)); p->next = g; p->count = 0; pcb->guardians[0] = p; diff --git a/src/ikarus.boot b/src/ikarus.boot index 469af0e..ebfe56f 100644 Binary files a/src/ikarus.boot and b/src/ikarus.boot differ